Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

UIAppearance. Управление внешним видом iOS-приложений

Anna | 2.07.2014 | нет комментариев
Жанр либо Суть
Сообщение либо Носитель
Красноречие либо ДиалектикаКрасота — это что-то поверхностное либо же идущее из глубинных истин?
Что значит «отличный дизайн»?
Эстетические мнения относительны либо безусловны?

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

И пока мы продолжаем наши искания красоты и понимания мира, рынок мобильных приложений в данной области однозначно заявляет:

Пользователи платят за прекрасные приложения.

При покупке iPhone, пользователь приобретает также философию Apple: вещи обязаны не только отлично трудиться, но и отлично выглядеть. То же относится к разработке на iOS — уродливый интерфейс пользователя сказывается и на программном коде.

Исторически даже для незначительного метаморфозы внешнего вида приложения в iOS требовался комплект хаков, сопряженных с угрозой отклонения приложения в AppStore. К счастью, начиная с iOS 5 у разработчиков есть новейший инструмент: UIAppearance.

UIAppearance разрешает единообразно руководить жанром компонентов во каждому приложении.

Для реализации этого с сохранением присутствующей конструкции UIKit эксперты Apple реализовали довольно увлекательное решение: UIAppearance — это протокол, предоставляющий прокси-объект, тот, что применяется для конфигурирования объектов определенного класса. Отчего именно прокси, а не качество либо способ самого UIView? Потому что существуют объекты, не входящие в иерархию UIView, такие какUIBarButtonItem, со своим собственным представлением. Внешний вид может быть изменен у всех компонентов определенного типа либо только у привязанных к специфической иерархии:

  • appearance возвращает прокси-объект для данного класса элементов.
  • appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass,...: возвращает прокси-объект для объектов, находящихся в определенном контейнере.

Для управления внешним видом всех объектов класса, необходимо применять прокси-объект, связанный с этим классом. Скажем, Дабы изменить цвет всех объектов UINavigationBar:

[[UINavigationBar appearance] setTintColor:myColor];

Для того, Дабы изменить внешний вид объектов определенного класса в заданном контейнере — используйте способ appearanceWhenContainedIn::

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
                               setTintColor:myNavBarColor];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class], nil]
                               setTintColor:myPopoverNavBarColor];
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil]
                               setTintColor:myToolbarColor];
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], [UIPopoverController class], nil]
                               setTintColor:myPopoverToolbarColor];

Определение свойств, доступных через UIAppearance

Главной загвоздкой работы UIAppearance через прокси является трудность определения списка способов, доступных для метаморфозы. От того что appearance возвращает id, Xcode не предоставляет соответствующую информацию при авто-подстановке.

Получить список способов, работающих с UIAppearance дозволено поиском по заголовочным файлам:

$ cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.sdk/System/Library/Frameworks/UIKit.framework/Headers
$ grep -H UI_APPEARANCE_SELECTOR ./* |sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//'

UIAppearance завязан на присутствие макроса UI_APPEARANCE_SELECTOR в определении способа. Всякий способ с сходственной пометкой может быть использован при работе через прокси.

Вот, для комфорта, список поддерживаемых свойств для iOS 6.1

Реализация UIAppearance в собственных компоне

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB