OS X Animation Technologies

Слияние сложных анимаций и визуальных эффектов в приложение может быть трудным, часто требуя, чтобы разработчики использовали низкокачественную графику APIs, такой как OpenGL для получения приемлемой производительности анимации. OS X обеспечивает несколько технологий, упрощающих создавать богатые, анимированные интерфейсы приложения из высокоуровневого APIs, который доступен и приложениям Какао и Углерода.

Базовая анимация

Базовая Анимация является платформой Objective C, сначала представленной в OS X v10.5, который позволяет Вам существенно увеличивать стоимость продукции своего приложения путем добавления анимаций в реальном времени и визуальных переходов, не будучи должен знать тайную графику и математические методы. Используя Базовую Анимацию можно динамично представить и анимировать текст, 2D графику, OpenGL, Кварцевые составы Композитора и видео QuickTime одновременно, вместе с эффектами прозрачности и Базовыми фильтрами Изображения и эффектами.

В ее основе Базовая Анимация является высокой скоростью, 2D механизмом разделения на уровни. Вы создаете интерфейс Core Animation путем деления пользовательского интерфейса на отдельные слои. Путем составления композита тех уровней вместе Вы создаете законченный пользовательский интерфейс. Рисунок 3-1 показывает пользовательский интерфейс, анимирующий его содержание, затем разделяющее на его анализируемые Базовые Слои анимации, чтобы показать, как объединены уровни.

Рисунок 3-1  Базовый пользовательский интерфейс Анимации разложился на уровни
A Core Animation user interface decomposed into layers

Уровни располагаются в дереве вложенного слоя — абстракция, которая должна быть знакома разработчикам, использовавшим представления в их приложении Какао. Каждое дерево видимого слоя поддерживается соответствующим деревом рендеринга, которое ответственно за кэширование содержания уровня и быстро составление композита его на экран как требуется. Ваше приложение не должно выполнять дорогостоящие операции перерисовки, если не изменяется содержание.

В дополнение к основной позиции и геометрии уровня, каждый уровень также обеспечивает дополнительные визуальные свойства, применяющиеся, когда содержание уровня представляется, включая:

Несмотря на то, что Базовая Анимация является 2D механизмом разделения на уровни, она предоставляет поддержку для убеждения 3D сцен с помощью проективных трансформаций. Каждый уровень имеет трехмерную матрицу преобразования, применяющуюся к ее содержанию и второй трехмерной матрице преобразования, применяющейся к ее подуровням. Используя эти проекции, можно создать ошеломляющие пользовательские интерфейсы, передающие глубину пользователю (см. рисунок 3-2).

  Интерфейс Figure 3-2 Core Animation 3D
Core Animation 3D interface

Анимация уровней

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

Неявные анимации происходят автоматически в ответ на установку нового значения для animatable свойства слоя. Базовая Анимация принимает на себя полную ответственность за выполнение анимации, в частоте кадров, в отдельном потоке, освобождая Ваше приложение для обработки других событий. Например, путем присвоения frame свойство newFrame значение, textLayer объект анимирует гладко к новому расположению.

textLayer.frame=newFrame;

Каждое из animatable свойств уровня имеет связанную неявную анимацию. Можно переопределить анимацию по умолчанию для предоставления собственных анимаций для свойства слоя. Можно также отключить анимацию любого свойства слоя, или временно или постоянно.

Явная анимация достигается путем создания экземпляра Базового класса анимации Анимации и указания целевого слоя и, дополнительно, свойство. Явно анимация свойства слоя влияет только на значение представления свойства; фактическое значение свойства слоя не изменяется. Например, для привлечения внимания к уровню Вы могли бы заставить его вращать 360 ° путем анимации матрицы преобразования. Эта анимация влияет на дисплей уровня, но его матрица преобразования остается нетронутой.

Управление расположением

Базовые Слои анимации поддерживают классическую модель представления Cocoa расположения уровней относительно их суперуровня — стиль, известный как “пружины и распорки”. Кроме того, Базовая Анимация также предоставляет более общему менеджеру по расположению механизм, позволяющий Вам писать Вашим собственным менеджерам по расположению. Менеджер по пользовательскому макету принимает на себя ответственность за обеспечение расположения подуровней связанного уровня.

Используя менеджера по пользовательскому макету, Ваше приложение может создать сложные анимации путем использования в своих интересах неявных анимаций. Обновление позиции, размера, или преобразовывает матрицу причин уровня это для анимации к новым настройкам. Стиль CoverFlow анимации выполняется с менеджером по пользовательскому макету.

Базовая Анимация предоставляет ограничительному менеджеру по расположению класс, располагающий уровни с помощью ряда ограничений. Каждое указанное ограничение описывает отношение одного геометрического атрибута уровня (левые, право, вершина, или базовый край или горизонтальный или вертикальный центр) к геометрическому атрибуту одного из его одноуровневых уровней или его суперуровня. Например, с помощью ограничительного менеджера по расположению можно определить расположение, где уровень A всегда центрируется и 5 точек ниже уровня B. Движущийся уровень B к новой позиции автоматически заставляет уровень A” менять местоположение себя относительно уровня B.

Интеграция NSView с базовой анимацией

Какао NSView класс интегрируется с Базовой Анимацией и уровнями двумя способами. Первый тип интеграции является хостингом уровня. Размещающее уровень представление выводит на экран Базовое дерево Слоя анимации, установленное приложением. Это - ответственность приложения взаимодействовать с содержанием уровня путем управления уровнями непосредственно. Представление хостинга уровня состоит в том как Анимация Ядра отображений приложения пользовательские интерфейсы.

Вы указываете что представление aView узел уровня Базового Слоя анимации rootLayer следующим образом:

 
// aView is an existing view in a window
// rootLayer is the root layer of a layer tree
 
[aView setLayer:rootLayer];
[aView setWantsLayer:YES];

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

Второй тип NSView и Базовая интеграция Анимации поддерживается уровнем представления. Поддержанные уровнем представления используют Базовые Слои анимации в качестве своего запоминающего устройства, освобождая представления от ответственности обновления экрана. Представления должны перерисовать только, когда фактически изменяется содержание представления. Включение поддержки уровня для представления и его потомков сделано с помощью следующего кода:

 
// aView is an existing view in a window
[aView setWantsLayer:YES];

Когда поддержка уровня включена для представления, представление и все его подпредставления зеркально отражаются Базовым деревом Слоя анимации. Представления могут быть стандартными средствами управления Водой или пользовательскими представлениями. Представление и его подпредставления все еще принимают участие в цепочке респондента, все еще получают события и действие как любое другое представление. Однако при перерисовке потребностей, которые будут сделаны, и содержание не изменилось, дерево рендеринга обрабатывает перерисовку, а не приложение.

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

  • Управление непрозрачностью представления

  • Дополнительная тень, указанное использование NSShadow объект

  • Составляется дополнительный массив Базовых фильтров Изображения, применяющихся к содержанию позади представления перед его содержанием,

  • Базовый фильтр Изображения раньше составлял содержание представления с фоном

  • Дополнительный массив Базовых фильтров Изображения, применяющихся к содержанию представления и его подпредставлений

Для получения дополнительной информации о поддержанных уровнем представлениях см. Руководство по программированию Представления.

Прокси анимации какао

Беря сигнал от Базовой Анимации, Набор Приложения поддерживает понятие обобщенного средства анимации с помощью прокси анимации.

Классы, поддерживающие NSAnimatablePropertyContainer протокол предоставляет неявную поддержку анимации для любого свойства, которое является значением ключа, кодирующим совместимый. Путем работы через прокси анимации можно выполнить неявную анимацию, как Вы можете в Базовой Анимации.

Например, следующие причины фрагмента кода aView быть выведенным на экран в его новом расположении:

[aView setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];

Однако с помощью прокси анимации и того же метода просмотра, aView анимирует гладко к его новому расположению.

[[aView animator] setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];

В отличие от Базовой Анимации, позволяющей только анимацию свойств, имеющих прямое отображение на древовидное рендерингом свойство, Набор Приложения позволяет любому значению ключа, кодирующему совместимое свойство быть анимированным, если его класс реализует NSAnimatablePropertyContainer протокол. Анимация этих свойств действительно требует, чтобы представление перерисовало свое содержание, но еще намного проще, чем анимация этих свойств вручную. Как с Базовыми Слоями анимации можно изменить неявную анимацию по умолчанию для анимированных свойств.

Поскольку дополнительная информация об анимации Какао видит Руководство по программированию Анимации для Какао.

Переход к и от полноэкранного режима

NSView класс обеспечивает методы, позволяющие Вам легко обеспечивать анимацию перехода, использующуюся когда представление переходы к полноэкранному режиму и назад снова. Метод enterFullScreenMode:withOptions: позволяет Вам указывать целевой экран, который должно принять представление. Выход из полноэкранного режима сделан с помощью exitFullScreenModeWithOptions:. Можно протестировать, является ли представление в полноэкранном режиме с помощью метода isInFullScreenMode.

Дополнительная поддержка анимации

NSAnimation и NSViewAnimation классы обеспечивают намного более простую, и менее мощную, возможность анимации, чем NSAnimatablePropertyContainer протокол.

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

NSViewAnimation конкретный подкласс NSAnimation это предусматривает анимацию изменений кадра представления (таким образом, и позиция и размерности) и выполнение простого постепенного появления и эффектов постепенного исчезновения, с помощью любой из четырех предопределенных кривых прогресса. Анимации представления могут блокировать, асинхронный, или распараллелили асинхронные, но последовательные инкрементные изменения, поскольку координаты кадра представления интерполированы, сразу вступают в силу в самих экземплярах представления.

Если Ваше приложение будет предназначено для развертывания на OS X v10.5 или позже, то Вы найдете что прокси анимации предоставленный NSWindow и NSView классы обычно более удобны для использования, чем использование NSAnimation непосредственно.

NSAnimation и NSViewAnimation доступны в OS X v10.4 и позже. Для получения дополнительной информации о NSAnimation и NSViewAnimation, см. Руководство по программированию Анимации для Какао.