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

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

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

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

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

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

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

2 ответов


существует частная структура под названием "CoreThemeDefinition", которая обрабатывает файлы uicatalog, эти файлы могут быть превращены в".car " файлы и загружены с помощью NSAppearance. Я лично думаю, что Apple собирается включить редактор в Xcode в будущем, но пока вы можете использовать этот маленький инструмент, который я сделал:https://github.com/insidegui/AppearanceMaker

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

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

[[NSAppearance alloc] initWithAppearanceNamed:@"Your-appearance-name" bundle:nil]

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

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

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

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

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

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

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