Основы анимации в iOS для начинающих
Основные понятия
Говоря об анимациях нельзя обойтись без нескольких фундаментальных вещей. Определим их:
Core Animation — фреймворк для работы с базовыми классами анимации. Использование Core Animation полностью автоматизировано: не нужно создавать циклов и таймеров, чтобы сделать анимацию.
Core Animation обеспечивает набор классов анимации, которые можно использовать в приложении:
- CABasicAnimation обеспечивает простую интерполяцию между значениями для слоя.
- CAKeyframeAnimation обеспечивает поддержку анимации по ключевым кадрам. Вы указываете путь к разделу свойств слоя для анимации, массив значений, которые представляют значения на каждом этапе анимации, а также массивы ключевых моментов кадра и функции синхронизации. Поскольку выполняется анимация, каждое значение устанавливается, в свою очередь с помощью заданной интерполяции.
- CATransition обеспечивает эффект перехода, который влияет на контент всего слоя. Он исчезает, толкает, или раскрывает содержимое слоя при анимации. Последствия перехода может быть продлены путем предоставления собственных фильтров Core Image.
- CAAnimationGroup позволяет создать массив анимрованных объектов, которые будут сгруппированы вместе и работать одновременно.
- В дополнение к указанию типа анимации для выполнения, необходимо также указать продолжительность анимации, темп (как интерполированные значения распределяются по длительности), повторить ли анимацию и сколько раз, следует ли автоматически обратная когда каждый цикл завершается, и ее визуальное состояние, когда анимация завершена. Классы анимации и протокол CAMediaTimingпредоставляют все эти функции и многое другое.
CALayer — это базовый класс, который является родительским классом для всех типов слоев Core Animation, управляющих анимацией корневого слоя объекта. Классы получают доступ к слою и применяют к нему одно из свойств. Среди таких свойств — размер и положение слоя, фоновый цвет слоя, тень, скруглённые углы и тому подобное.
Слои - это объекты данных, которые управляют контентом, предоставляемым вашим приложением. Содержимое слоя состоит из растрового изображения, содержащего визуальные данные, которые вы хотите отобразить. Вы можете предоставить контент для этого растрового изображения одним из трех способов:
- Присвойте объект изображения непосредственно content свойству объекта слоя . (Этот метод лучше всего подходит для содержимого слоя, которое никогда или редко меняется.)
- Назначьте объект делегата слою и позвольте делегату нарисовать содержимое слоя. (Этот метод лучше всего подходит для содержимого слоя, которое может периодически меняться и может быть предоставлено внешним объектом, таким как представление.)
- Определите подкласс слоя и переопределите один из его методов рисования, чтобы обеспечить содержание слоя самостоятельно. (Этот метод подходит, если вам все равно нужно создать пользовательский подкласс слоя или если вы хотите изменить базовое поведение слоя при рисовании.)
По аналогии с экземпляром класса UIView, экземпляр CALayer имеет один слой родителя (superlayer) и коллекцию подслоев, создавая иерархию слоев, которые называют деревом слоев. Слои указывают свою геометрию по отношению к своим superlayer, создавая локальную систему координат.
Чтобы при создании анимации указать путь к свойствам CALayer, используется метод animationWithKeyPath или свойство keyPath. Последние назначаются строковым видом @«название_ключа». Перечень анимируемых свойств CALayer:
anchorPoint
backgroundColor
backgroundFilters
borderColor
borderWidth
bounds
compositingFilter
contents
contentsRect
cornerRadius
doubleSided (Не устанавливает анимацию по умолчанию)
filters
frame(Само по себе не анимируемое. Вместо этого используйте свойства bounds и position.)
hidden
mask
masksToBounds
opacity
position
shadowColor
shadowOffset
shadowOpacity
shadowRadius
sublayers
sublayerTransform
transform
zPosition
Модели анимации
Существует две модели анимации: неявная и явная.
Неявная анимация
Неявная модель анимации Core Animation предполагает, что все изменения в анимируемых свойствах слоя должны быть постепенными и асинхронными. Анимация будет происходить без эффектов, переходя от одного значения к другому.
Явная анимация
Требует создания объекта анимации и задания ему некоторых параметров, на- пример, начального и конечного значений изменяемого свойства, длительности анимации и ряда других.
Изменение свойства будет происходить анимированно с учетом заданных параметров. Чтобы запустить анимацию, нужно добавить объект анимации слою с помощью метода add(_ anim: CAAnimation, forKey key: String?). При добавлении объект анимации копируется в слой, что позволяет повторно использовать этот объект для других слоев.