Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

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