Расширения кодирования значения ключа
Базовая Анимация расширяется 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 тип | Обертывание класса |
---|---|
| |
| |
|
|
|
Ключевая поддержка пути структур
CAAnimation
и CALayer
классы позволяют Вам получить доступ к полям выбранных ключевых путей использования структур данных. Эта функция является удобным способом указать поле структуры данных, которую Вы хотите анимировать. Можно также использовать эти соглашения в сочетании с setValue:forKeyPath:
и valueForKeyPath:
методы, чтобы установить и получить те поля.
Ключевые пути CATransform3D
Можно использовать улучшенную ключевую поддержку пути для получения определенных значений трансформации для свойства, содержащего a CATransform3D
тип данных. Для указания всего ключевого пути для преобразований уровня Вы использовали бы строковое значение transform
или sublayerTransform
сопровождаемый одним из полевого ключа соединяет каналом в Таблице c-2. Например, для указания фактора вращения вокруг оси z уровня Вы указали бы ключевой путь transform.rotation.z
.
Полевой ключевой путь | Описание |
---|---|
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
| Набор к |
перевод | Набор к |
Следующий пример показывает, как можно изменить уровень с помощью setValue:forKeyPath:
метод. Пример устанавливает фактор перевода для оси X к 10 точкам, заставляя уровень сместиться той суммой вдоль обозначенной оси.
[myLayer setValue:[NSNumber numberWithFloat:10.0] forKeyPath:@"transform.translation.x"]; |
Ключевые пути CGPoint
Если значение данного свойства является a CGPoint
тип данных, можно добавить одни из имен полей в Таблице c-3 к свойству, чтобы получить или установить то значение. Например, для изменения x компонента уровня position
свойство, Вы могли записать в ключевой путь position.x
.
Поле структуры | Описание |
---|---|
| X компонент точки. |
| Y компонент точки. |
Ключевые пути CGSize
Если значение данного свойства является a CGSize
тип данных, можно добавить одни из имен полей в Таблице c-4 к свойству, чтобы получить или установить то значение.
Поле структуры | Описание |
---|---|
| Компонент width размера. |
| Компонент высоты размера. |
Ключевые пути CGRect
Если значение данного свойства является a CGRect
тип данных, можно добавить следующие имена полей в Таблице c-3 к свойству, чтобы получить или установить то значение. Например, для изменения компонента width уровня bounds
свойство, Вы могли записать в ключевой путь bounds.size.width
.
Поле структуры | Описание |
---|---|
| Источник прямоугольника как a |
| X компонент прямоугольного источника. |
| Y компонент прямоугольного источника. |
| Размер прямоугольника как a |
| Компонент width прямоугольного размера. |
| Компонент высоты прямоугольного размера. |