Расширения кодирования значения ключа

Базовая Анимация расширяется NSKeyValueCoding протокол, поскольку это принадлежит CAAnimation и CALayer классы. Это расширение добавляет значения по умолчанию для некоторых ключей, разворачивает переносящиеся соглашения и добавляет ключевую поддержку пути CGPoint, CGRect, CGSize, и CATransform3D типы.

Значение ключа, кодирующее совместимые контейнерные классы

CAAnimation и CALayer классы являются значением ключа, кодирующим совместимые контейнерные классы, что означает, что можно установить значения для произвольных ключей. Даже если ключ someKey не заявленное свойство CALayer класс, можно все еще установить значение для него следующим образом:

[theLayer setValue:[NSNumber numberWithInteger:50] forKey:@"someKey"];

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

someKeyValue=[theLayer valueForKey:@"someKey"];

Поддержка значения по умолчанию

Базовая Анимация добавляет соглашение к кодированию значения ключа, посредством чего класс может обеспечить значение по умолчанию для ключа, не имеющего никакого значения набора. CAAnimation и CALayer классы поддерживают это соглашение с помощью defaultValueForKey: метод класса.

Для обеспечения значения по умолчанию для ключа создайте подкласс желаемого класса и переопределите defaultValueForKey: метод. Ваша реализация этого метода должна исследовать основной параметр и возвратить надлежащее значение по умолчанию. Перечисление c-1 показывает демонстрационную реализацию defaultValueForKey: метод для расположенного на слое объекта, обеспечивающего значение по умолчанию для masksToBounds свойство.

  Реализация перечисления c-1 В качестве примера defaultValueForKey:

 
+ (id)defaultValueForKey:(NSString *)key
{
    if ([key isEqualToString:@"masksToBounds"])
         return [NSNumber numberWithBool:YES];
 
    return [super defaultValueForKey:key];
}

Обертывание соглашений

Когда данные для ключа состоят из скалярного значения или структуры данных C, необходимо обернуть тот тип в объект прежде, чем присвоить его уровню. Точно так же при доступе к тому типу, необходимо получить объект и затем развернуть надлежащие значения с помощью расширений надлежащего класса. Таблица c-1 перечисляет типы C, обычно используемые и класс Objective C, который Вы используете для обертывания их.

Табличные c-1  классы Обертки для типов C

C тип

Обертывание класса

CGPoint

NSValue

CGSize

NSValue

CGRect

NSValue

CATransform3D

NSValue

CGAffineTransform

NSAffineTransform (Только OS X)

Ключевая поддержка пути структур

CAAnimation и CALayer классы позволяют Вам получить доступ к полям выбранных ключевых путей использования структур данных. Эта функция является удобным способом указать поле структуры данных, которую Вы хотите анимировать. Можно также использовать эти соглашения в сочетании с setValue:forKeyPath: и valueForKeyPath: методы, чтобы установить и получить те поля.

Ключевые пути CATransform3D

Можно использовать улучшенную ключевую поддержку пути для получения определенных значений трансформации для свойства, содержащего a CATransform3D тип данных. Для указания всего ключевого пути для преобразований уровня Вы использовали бы строковое значение transform или sublayerTransform сопровождаемый одним из полевого ключа соединяет каналом в Таблице c-2. Например, для указания фактора вращения вокруг оси z уровня Вы указали бы ключевой путь transform.rotation.z.

Таблица c-2  Преобразовывает ключевые пути значения поля

Полевой ключевой путь

Описание

rotation.x

Набор к NSNumber возразите, чье значение является вращением, в радианах, в оси X.

rotation.y

Набор к NSNumber возразите, чье значение является вращением, в радианах, в оси y.

rotation.z

Набор к NSNumber возразите, чье значение является вращением, в радианах, в оси z.

rotation

Набор к NSNumber возразите, чье значение является вращением, в радианах, в оси z. Это поле идентично установке rotation.z поле.

scale.x

Набор к NSNumber возразите, чье значение является масштабным коэффициентом для оси X.

scale.y

Набор к NSNumber возразите, чье значение является масштабным коэффициентом для оси y.

scale.z

Набор к NSNumber возразите, чье значение является масштабным коэффициентом для оси z.

scale

Набор к NSNumber возразите, чье значение является средним числом всех трех масштабных коэффициентов.

translation.x

Набор к NSNumber возразите, чье значение является фактором перевода вдоль оси X.

translation.y

Набор к NSNumber возразите, чье значение является фактором перевода вдоль оси y.

translation.z

Набор к NSNumber возразите, чье значение является фактором перевода вдоль оси z.

перевод

Набор к NSValue объект, содержащий NSSize или CGSize тип данных. Тот тип данных указывает сумму для перевода в оси x и y.

Следующий пример показывает, как можно изменить уровень с помощью setValue:forKeyPath: метод. Пример устанавливает фактор перевода для оси X к 10 точкам, заставляя уровень сместиться той суммой вдоль обозначенной оси.

[myLayer setValue:[NSNumber numberWithFloat:10.0] forKeyPath:@"transform.translation.x"];

Ключевые пути CGPoint

Если значение данного свойства является a CGPoint тип данных, можно добавить одни из имен полей в Таблице c-3 к свойству, чтобы получить или установить то значение. Например, для изменения x компонента уровня position свойство, Вы могли записать в ключевой путь position.x.

Таблица c-3  поля структуры данных CGPoint

Поле структуры

Описание

x

X компонент точки.

y

Y компонент точки.

Ключевые пути CGSize

Если значение данного свойства является a CGSize тип данных, можно добавить одни из имен полей в Таблице c-4 к свойству, чтобы получить или установить то значение.

Таблица c-4  поля структуры данных CGSize

Поле структуры

Описание

width

Компонент width размера.

height

Компонент высоты размера.

Ключевые пути CGRect

Если значение данного свойства является a CGRect тип данных, можно добавить следующие имена полей в Таблице c-3 к свойству, чтобы получить или установить то значение. Например, для изменения компонента width уровня bounds свойство, Вы могли записать в ключевой путь bounds.size.width.

Таблица c-5  поля структуры данных CGRect

Поле структуры

Описание

origin

Источник прямоугольника как a CGPoint.

origin.x

X компонент прямоугольного источника.

origin.y

Y компонент прямоугольного источника.

size

Размер прямоугольника как a CGSize.

size.width

Компонент width прямоугольного размера.

size.height

Компонент высоты прямоугольного размера.