Как я могу создать «файл внешнего вида» для NSAppearance?

18

Я читал документацию по Cocoa и наткнулся на некоторые новые функции в API 10.9.

Из документов Я понимаю, что NSAppearance class и связанный с ним протокол NSAppearanceCustomization Представляют собой средство настройки внешнего вида NSView и его потомков.

  

Объект NSAppearance представляет собой файл, который указывает стандартный или настраиваемый внешний вид, который применяется к подмножеству элементов пользовательского интерфейса в приложении. Приложение может содержать несколько файлов внешнего вида и потому, что NSAppearance соответствует NSCoding - вы можете использовать Interface Builder для назначения элементов интерфейса для внешнего вида.
  Как правило, вы настраиваете окно с помощью с помощью Xcode для создания файла внешнего вида, который содержит виды, которые вы хотите настроить, и пользовательское искусство, которое должно быть применено к ним . Xcode преобразует художественный контент файла в формат времени выполнения, который AppKit может рисовать, когда отображаются указанные виды.

Хорошо, что все звучит аккуратно и многообещающе, но нигде в документации я не могу найти, что такое внешний файл или как его создать. Поиски Google выглядят пустыми, за исключением тонкой документации, которую я уже прочитал.

Я вижу, что UIKit имеет аналогичный класс UIAppearance , но из того, что я могу сказать, это не прямой порт класса UIKit.

Кто-нибудь знает, как сделать один из этих волшебных «файлов внешнего вида» и что именно мы можем с ними сделать?

    
задан Brad Allred 05.11.2013 в 02:40
источник
  • Интересно, что после этого так долго можно получить понижение. Что-то изменилось в Mac OS 10.10 по этому поводу? –  Brad Allred 23.09.2014 в 18:35

2 ответа

9

Существует частная структура под названием «CoreThemeDefinition», которая обрабатывает файлы uicatalog, эти файлы могут быть превращены в файлы «.car» и загружены с использованием NSAppearance. Я лично думаю, что Apple собирается включить редактор в Xcode в будущем, но пока вы можете использовать этот маленький инструмент, который я сделал: Ссылка

Сначала вы открываете приложение и выбираете место для сохранения файла uicatalog, затем вы нажимаете «create skeleton». Это будет экспортировать различные PSD, содержащие изображения по умолчанию для элементов управления, затем вы можете редактировать их, сохранять и экспортировать файл автомобиля с помощью приложения.

Этот файл должен быть включен в ресурсы вашего приложения, и вы загружаете этот настраиваемый внешний вид, используя:

[[NSAppearance alloc] initWithAppearanceNamed:@"Your-appearance-name" bundle:nil]
    
ответ дан Guilherme Rambo 17.04.2014 в 01:50
  • вы могли бы расширить этот ответ здесь (а не просто разместить ссылку)? Я бы, скорее всего, согласился с этим ответом, если бы на самом деле содержалась некоторая информация, найденная по ссылке. –  Brad Allred 24.04.2014 в 21:04
  • Отредактировано с дополнительной информацией, спасибо за вопрос. –  Guilherme Rambo 24.04.2014 в 21:42
  • , это, безусловно, самое близкое к ответу, который я, скорее всего, получу (пока, возможно, сами Apple не сделают что-то с этим). Принято. –  Brad Allred 28.04.2014 в 17:05
  • Мне очень любопытно, если это будет принято в магазине приложений. –  uchuugaka 23.09.2014 в 17:33
  • @uchuugaka Я думаю, что это, вероятно, было бы, хотя мы используем private api, чтобы сделать внешний вид, загружая внешний вид, только использует общедоступные API ... –  Guilherme Rambo 01.10.2014 в 01:01
Показать остальные комментарии
5

EDIT: ответ Гильерме более точен, хотя по-прежнему нет общедоступного способа изменения видимости, как вы можете в iOS.

NSAppearance не очень похож на UIAppearance (из того, что я могу сказать), он относится только к элементам управления при нормальных или светлых проявлениях. Примером этого может быть то, что вы нарисуете в качестве элемента popover (light) и панели инструментов окна (обычно), NSAppearance позволяет вам определить, в какую среду вы рисуете. Честно говоря, я еще не использовал его, но большая часть информации, которую я нашел, была в видео WWDC 2013 о том, что нового в Cocoa, и 10.9 примечания к выпуску

По моему мнению, это позволяет вам указать, как выглядит элемент управления на определенном фоне. Если используемый вами элемент управления должен быть повторно использован на другом фоне, вы можете проверить текущий вид и соответствующим образом нарисовать свой контроль, используя [NSAppearance currentAppearance]

Еще одна важная часть заключается в том, что существует новый протокол, который могут принимать ваши взгляды или окна, называемые NSAppearanceCustomization , который позволяет вам указать внешний вид этого представления. Не совсем точно, как это работает, но оно есть. Некоторые элементы управления качелями также реализованы, которые обсуждаются в HIG для элементов управления .

Есть два варианта, которые Apple определяет, но вы можете определить свои собственные, используя свои собственные строки (опять же, не уверен). В нижней части документов, с которыми вы связаны, вы найдете эти 2 константы:

APPKIT_EXTERN NSString *const NSAppearanceNameAqua;
APPKIT_EXTERN NSString *const NSAppearanceNameLightContent;

Итак, это не UIAppearance, это просто способ узнать, на каком фоне вы рисуете.

    
ответ дан Lucas Derraugh 05.11.2013 в 04:50
  • Спасибо, я даю +1 для ссылки HIG, которая объясняет разницу между NSAppearanceNameLightContent и NSAppearanceNameAqua, но мой вопрос спрашивает об «файлах внешнего вида», упомянутых в документах. Мало того, что он говорит о создании собственного, но несколько методов, которые являются общедоступными в классе, предназначены для загрузки одного из набора приложений (а не встроенных). –  Brad Allred 05.11.2013 в 17:02
  • @BradAllred Я посмотрю, смогу ли я получить рабочий пример некоторое время. Для этого нет образца кода, поэтому трудно точно сказать, как вы его используете. Я согласен, но похоже, что вы можете создать свой собственный объект NSAppearance, но я не уверен, как это будет использоваться в IB. –  Lucas Derraugh 05.11.2013 в 19:36