Базовые основы анимации
Базовая Анимация обеспечивает систему общего назначения для анимации представлений и других визуальных элементов Вашего приложения. Базовая Анимация не является заменой для представлений Вашего приложения. Вместо этого это - технология, интегрирующаяся с представлениями для обеспечения лучшей производительности и поддержки анимации их содержания. Это достигает этого поведения путем кэширования содержания представлений в битовые массивы, которыми может управлять непосредственно аппаратное обеспечение машинной графики. В некоторых случаях это поведение кэширования могло бы потребовать, чтобы Вы заново обдумали, как Вы представляете и управляете содержанием своего приложения, но большую часть времени Вы используете Базовую Анимацию, никогда не зная, что это там. В дополнение к кэширующемуся содержанию представления Базовая Анимация также определяет способ указать произвольное визуальное содержание, интегрировать то содержание с Вашими представлениями и анимировать его вместе со всем остальным.
Вы используете Базовую Анимацию для анимации изменений в представлениях приложения и визуальных объектах. Большинство изменений касается изменения свойств Ваших визуальных объектов. Например, Вы могли бы использовать Базовую Анимацию для анимации изменений в позиции представления, размере или непрозрачности. При внесении такого изменения Базовая Анимация анимирует между текущей стоимостью свойства и новым значением, которое Вы указываете. Вы обычно не использовали бы Базовую Анимацию для замены содержания представления 60 раз в секунду, такой как в мультфильме. Вместо этого Вы используете Базовую Анимацию, чтобы переместить содержание представления вокруг экрана, постепенно появиться, что содержание или, примените произвольные графические трансформации к представлению или измените другие визуальные атрибуты представления.
Уровни обеспечивают основание для рисования и анимаций
Расположенные на слое объекты являются 2D поверхностями, организованными в 3D пространстве, и в основе всего, что Вы делаете с Базовой Анимацией. Как представления, уровни управляют информацией о геометрии, содержании и визуальных атрибутах их поверхностей. В отличие от представлений, уровни не определяют свое собственное появление. Уровень просто управляет информацией состояния, окружающей битовый массив. Сам битовый массив может быть результатом представления, получающего себя или фиксированное изображение, которое Вы указываете. Поэтому основные уровни, которые Вы используете в своем приложении, считаются объектами модели, потому что они прежде всего управляют данными. Это понятие важно для запоминания, потому что оно влияет на поведение анимаций.
Основанная на уровне модель получения
Большинство уровней не делает никакого фактического получения в Вашем приложении. Вместо этого уровень получает содержание, Ваше приложение обеспечивает и кэширует его в битовом массиве, иногда упоминающемся как запоминающее устройство. То, когда Вы впоследствии изменяете свойство уровня, все, что Вы делаете, изменяет информацию состояния, связанную с расположенным на слое объектом. Когда изменение инициировало анимацию, Базовая Анимация передает растровую и информацию уровня состояния аппаратному обеспечению машинной графики, выполняющему работу рендеринга битового массива с помощью новой информации, как показано на рисунке 1-1. Управление битовым массивом в аппаратных средствах приводит к намного более быстрым анимациям, чем можно было сделать в программном обеспечении.
Поскольку это управляет статическим битовым массивом, основанное на уровне получение отличается значительно от более традиционных основанных на представлении методов получения. С основанным на представлении получением изменения в самом представлении часто приводят к вызову к представлению drawRect:
метод для перерисовки содержания с помощью новых параметров. Но получение таким образом является дорогим, потому что оно сделано с помощью CPU на основном потоке. Базовая Анимация избегает этого расхода, когда это возможно, путем управления кэшированным растровым изображением в аппаратных средствах для достижения тех же или подобных эффектов.
Несмотря на то, что Базовое использование Анимации кэшировало содержание как можно больше, Ваше приложение должно все еще обеспечить начальное содержание и время от времени обновлять его. Существует несколько путей к Вашему приложению для обеспечения расположенного на слое объекта содержанием, которые описаны подробно в Обеспечении Содержания Уровня.
Основанные на уровне анимации
Данные и информация состояния расположенного на слое объекта разъединяются от визуального представления содержания того уровня на экране. Это разъединение дает Базовую Анимацию, которую способ вмешаться сам и анимировать изменение от старого состояния оценивает новым значениям состояния. Например, изменение свойства позиции уровня заставляет Базовую Анимацию перемещать уровень от своей текущей позиции до недавно указанной позиции. Подобные изменения в других свойствах вызывают надлежащие анимации. Рисунок 1-2 иллюстрирует несколько типов анимаций, которые можно выполнить на уровнях. Для списка свойств слоя, инициировавших анимации, см. Свойства Animatable.
В течение анимации Базовая Анимация делает все покадровое получение для Вас в аппаратных средствах. Все, что необходимо сделать, указывают запуск и конечные точки анимации и позволяют Базовой Анимации сделать остальных. Можно также указать пользовательскую информацию синхронизации и параметры анимации по мере необходимости; однако, если Вы не делаете, Базовая Анимация обеспечивает подходящие значения по умолчанию.
Для получения дополнительной информации о том, как инициировать анимации и сконфигурировать параметры анимации, посмотрите Содержание Уровня Анимации.
Расположенные на слое объекты определяют свою собственную геометрию
Одно из заданий уровня должно управлять визуальной геометрией для своего содержания. Визуальная геометрия охватывает информацию о границах того содержания, его позиции на экране, и поворачивался ли уровень, масштабировался или преобразовывался всегда. Как представление, уровень имеет кадр и ограничивает прямоугольники, которые можно использовать для расположения уровня и его содержания. Уровни также имеют другие свойства, которые представления не имеют, такие как точка привязки, определяющая точку, вокруг которой происходят манипуляции. Путем Вы указываете, что некоторые аспекты геометрии уровня также отличаются от того, как Вы указываете что информация для представления.
Использование уровней два типа систем координат
Уровни используют и основанные на точке системы координат и системы координат модуля для указания размещения содержания. То, какая система координат используется, зависит от типа передаваемой информации. Основанные на точке координаты используются при указании значений, которые отображаются непосредственно на координаты экрана или должны быть указаны относительно другого уровня, такой что касается уровня position
свойство. Координаты модуля используются, когда значение не должно быть связано к координатам экрана, потому что это относительно некоторого другого значения. Например, уровень anchorPoint
свойство указывает точку относительно границ самого уровня, который может измениться.
Среди наиболее популярных способов использования основанных на точке координат должен указать размер и позицию уровня, который Вы делаете использование уровня bounds
и position
свойства. bounds
определяет систему координат самого уровня и охватывает размер уровня на экране. position
свойство определяет расположение уровня относительно системы координат его родителя. Несмотря на то, что уровни имеют a frame
свойство, то свойство фактически получено из значений в bounds
и position
свойства и используются менее часто.
Ориентация уровня bounds
и frame
прямоугольники всегда соответствуют ориентацию по умолчанию базовой платформы. Рисунок 1-3 показывает ориентации по умолчанию прямоугольника границ и на iOS и на OS X. В iOS источник прямоугольника границ находится в верхнем левом углу уровня по умолчанию, и в OS X это находится в нижнем левом углу. При совместном использовании Базового кода Анимации между iOS и версиями OS X приложения необходимо принять такие различия во внимание.
Одна вещь отметить на рисунке 1-3 состоит в том что position
свойство расположено посреди уровня. То свойство является одним из нескольких, определение которых изменяется на основе значения в уровне anchorPoint
свойство. Точка привязки представляет точку, из которой происходят определенные координаты, и описан более подробно во Влиянии Точек привязки Геометрические Манипуляции.
Точка привязки является одним из нескольких свойств, что Вы указываете использование системы координат модуля. Базовая Анимация использует координаты модуля для представления свойств, значения которых могли бы измениться, когда изменяется размер уровня. Можно думать о координатах модуля как об указании процента общего возможного значения. Каждая координата в координатном пространстве модуля имеет диапазон 0.0
к 1.0
. Например, вдоль оси X, левый край в координате 0.0
и правый край в координате 1.0
. Вдоль оси y ориентация модуля координирует изменения значений в зависимости от платформы, как показано на рисунке 1-4.
Все координатные значения, являются ли они точками или координатами модуля, указаны как числа с плавающей точкой. Использование чисел с плавающей точкой позволяет Вам указывать точные расположения, которые могли бы упасть между значениями нормальной координаты. Использование значений с плавающей точкой удобно, особенно во время печати или при рисовании к дисплею Сетчатки, где одна точка могла бы быть представлена многократными пикселями. Значения с плавающей точкой позволяют Вам проигнорировать разрешение базового устройства и просто указать значения в точности, в которой Вы нуждаетесь.
Влияние точек привязки геометрические манипуляции
Геометрия имела отношение, манипуляции уровнем происходят относительно точки привязки того уровня, которая можно получить доступ к использованию уровня anchorPoint
свойство. Влияние точки привязки является самым примечательным при управлении position
или transform
свойства уровня. Свойство позиции всегда указывается относительно точки привязки уровня, и любые трансформации, Вы применяетесь к уровню, происходят относительно точки привязки также.
Рисунок 1-5 демонстрирует, как изменение точки привязки от ее значения по умолчанию до различного значения влияет position
свойство уровня. Даже при том, что уровень не переместился в границах его родителей, перемещение точки привязки от центра уровня к источнику границ уровня изменяет значение в position
свойство.
Рисунок 1-6 показывает, как изменение влияния точки привязки преобразовывает, применился к уровню. Когда Вы применяетесь, вращение преобразовывают к уровню, вращения происходят вокруг точки привязки. Поскольку точка привязки установлена в середину уровня по умолчанию, это обычно создает вид поведения вращения, которое Вы ожидали бы. Однако при изменении точки привязки результаты вращения отличаются.
Уровнями можно управлять в трех измерениях
Каждый уровень имеет два, преобразовывают матрицы, которые можно использовать для управления уровнем и его содержанием. transform
свойство CALayer
указывает преобразования, которые Вы хотите применить и к уровню и к его встроенным подуровням. Когда Вы хотите изменить сам уровень, обычно Вы используете это свойство. Например, Вы могли бы использовать то свойство, чтобы масштабировать или повернуть уровень или сменить его положение временно. sublayerTransform
свойство определяет дополнительные трансформации, применяющиеся только к подуровням, и используется обычно для добавления перспективного визуального эффекта к содержанию сцены.
Преобразовывает работу путем умножения координатных значений через матрицу чисел для получения новых координат, представляющих преобразованные версии исходных точек. Поскольку Базовые значения Анимации могут быть указаны в трех измерениях, каждая координатная точка имеет четыре значения, которые должны быть умножены через четыре четырьмя матрица, как показано на рисунке 1-7. В Базовой Анимации преобразование в числе представлено CATransform3D
ввести. К счастью, Вы не должны изменять поля этой структуры непосредственно для выполнения стандартных трансформаций. Базовая Анимация обеспечивает исчерпывающий набор функций для создания масштаба, перевода и матриц вращения и для того, чтобы сделать сравнения матриц. В дополнение к управлению преобразовывает функции использования, Базовая Анимация расширяет поддержку кодирования значения ключа, чтобы позволить Вам изменять ключ использования преобразования пути. Для списка ключевых путей можно изменить, видеть Ключевые Пути CATransform3D.
Рисунок 1-8 показывает матричные конфигурации для некоторых более общих трансформаций, которые можно сделать. Умножение любой координаты идентификационными данными преобразовывает, возвращает ту же самую координату. Для других трансформаций, как координата изменяется, зависит полностью, на которых матричных компонентах Вы изменяетесь. Например, для перевода вдоль оси X только Вы предоставили бы ненулевое значение для tx
компонент матрицы перевода и отпуска ty
и tz
значения к 0. Для вращений Вы обеспечили бы надлежащий синус и значения косинуса целевого угла вращения.
Для получения информации о функциях Вы используете, чтобы создать и управлять, преобразовывает, посмотрите Базовую Ссылку Функции анимации.
Деревья уровня отражают различные аспекты состояния анимации
Приложение с помощью Базовой Анимации имеет три набора расположенных на слое объектов. Каждый набор расположенных на слое объектов имеет различную роль в том, чтобы заставлять содержание Вашего приложения появиться на экране:
Объекты в дереве уровня модели (или просто “дереве уровня”) являются теми, Ваше приложение взаимодействует с большинством. Объекты в этом дереве являются объектами модели, хранящими целевые значения для любых анимаций. Каждый раз, когда Вы изменяете свойство уровня, Вы используете один из этих объектов.
Объекты в дереве представления содержат значения в полете для любых рабочих анимаций. Принимая во внимание, что объекты дерева уровня содержат целевые значения для анимации, объектов в представлении древовидное отражение текущая стоимость, как они появляются на экране. Вы никогда не должны изменять объекты в этом дереве. Вместо этого Вы используете эти объекты считать значения текущей анимации, возможно создать новую анимацию, запускающуюся в тех значениях.
Объекты в дереве рендеринга выполняют фактические анимации и являются частными к Базовой Анимации.
Каждый набор расположенных на слое объектов организован в иерархическую структуру как представления в Вашем приложении. Фактически, для приложения, включающего уровни для всех его представлений, начальная структура каждого дерева соответствует структуру иерархии представления точно. Однако приложение может добавить дополнительные расположенные на слое объекты — т.е. уровни, не связанные с целью — в иерархию слоев по мере необходимости. Вы могли бы сделать это в ситуациях для оптимизации производительности приложения для содержания, не требующего всех издержек представления. Рисунок 1-9 показывает отказ уровней, найденных в простом приложении для iOS. Окно в примере содержит довольное представление, само содержащее представление кнопки и два автономных расположенных на слое объекта. Каждое представление имеет соответствующий расположенный на слое объект, являющийся частью иерархии слоев.
Для каждого объекта в дереве уровня существует соответствующий объект в представлении и деревьях рендеринга, как показано на рисунке 1-10. Как был ранее упомянут, приложения прежде всего работают с объектами в дереве уровня, но май в объектах доступа времен в дереве представления. В частности, доступ presentationLayer
свойство объекта в дереве уровня возвращает соответствующий объект в дереве представления. Вы могли бы хотеть получить доступ к тому объекту считать текущую стоимость свойства, которое является посреди анимации.
Отношение между уровнями и представлениями
Уровни не являются заменой для представлений Вашего приложения — т.е. Вы не можете создать визуальный интерфейс, базируемый исключительно на расположенных на слое объектах. Уровни обеспечивают инфраструктуру для Ваших представлений. В частности уровни упрощают и более эффективный, чтобы нарисовать и анимировать содержание представлений и поддержать высокие частоты кадров при выполнении так. Однако существует много вещей, которые не делают уровни. Уровни не обрабатывают события, рисуют содержание, участвуют в цепочке респондента или делают много других вещей. Поэтому каждое приложение должно все еще иметь одно или более представлений для обработки тех видов взаимодействий.
В iOS каждое представление поддерживается соответствующим расположенным на слое объектом, но в OS X необходимо решить, какие представления должны иметь уровни. В OS X v10.8 и позже, это, вероятно, целесообразно добавлять уровни ко всем Вашим представлениям. Однако Вы не обязаны делать так и можете все еще отключить уровни в случаях, где издержки являются негарантированными и ненужными. Уровни действительно увеличивают память Вашего приложения наверху несколько, но их преимущества часто перевешивают недостаток, таким образом, всегда лучше протестировать производительность Вашего приложения прежде, чем отключить поддержку уровня.
При включении поддержки уровня представления Вы создаете то, что упоминается как поддержанное уровнем представление. В поддержанном уровнем представлении система ответственна за создание объекта нижележащего слоя и за хранение того уровня в синхронизации с представлением. Все представления iOS поддерживаются уровнем, и большинство представлений в OS X также. Однако в OS X, можно также создать размещающее уровень представление, которое является представлением, где Вы предоставляете расположенный на слое объект сами. Для размещающего уровень представления AppKit берет руки от подхода с управлением уровнем и не изменяет его в ответ на изменения представления.
В дополнение к уровням, связанным с Вашими представлениями, можно также создать расположенные на слое объекты, не имеющие соответствующего представления. Можно встроить эти автономные расположенные на слое объекты в любом другом расположенном на слое объекте в приложении, включая тех, которые связаны с целью. Вы обычно используете автономные расположенные на слое объекты в качестве части определенного пути оптимизации. Например, если бы Вы хотели использовать то же изображение в многократных местах, то Вы могли бы загрузить изображение один раз и связать его с многократными автономными расположенными на слое объектами и добавить те объекты к дереву уровня. Каждый уровень тогда обращается к исходному изображению вместо того, чтобы пытаться создать его собственную копию того изображения в памяти.
Для получения информации о том, как включить поддержку уровня представлений Вашего приложения, посмотрите Включающую Базовую Поддержку Анимации в Своем Приложении. Для получения информации о том, как создать иерархию расположенного на слое объекта, и для подсказок относительно того, когда Вы могли бы сделать так, посмотрите Создание Иерархии слоев.