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

Cocoa

Классы CAAnimation и CALayer расширяют протокол NSKeyValueCoding добавляя значения по умолчанию для ключей, расширенными обертываниями конвенций, и поддержкой ключей пути для CGPoint, CGRect, CGSize и CATransform3D.

Кодирование ключ-значение соответствия классам контейнеров

Оба, и CALayer и CAAnimation это совместимых контейнерные классы для ключ-значение кодирования, что позволяет устанавливать значения для произвольных ключей. То есть, в то время как ключ "Somekey" не объявлен свойством CALayer класса, однако вы можете установить значение ключа "Somekey" следующим образом:

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

Вы извлекаете значение ключа "Somekey", используя следующий код:

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

Mac OS X Примечание: В Mac OS X, CALayer и CAAnimation классы поддерживают NSCoding протокол и будет автоматически архивировать дополнительные ключи, которые вы установили для экземпляра этих классов.

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

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

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

Листинг 1 Пример реализации defaultValueForKey:

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

  return [super defaultValueForKey:key];
}

Обертывание конвенции

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

'C' типКласс
CGPointNSValue
CGSizeNSValue
CGRectNSValue
CGAffineTransformNSAffineTransform (Mac OS X только)
CATransform3DNSValue

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

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

CATransform3D предоставляет следующие поля:

Поле структурыОписание
rotation.xВращение в радианах, по оси х.
rotation.yВращение в радианах, по оси y.
rotation.zВращение в радианах, по оси z.
rotationВращение в радианах, по оси z. Это равнозначно установке поля rotation.z.
scale.xМасштабный коэффициент для оси х.
scale.yМасштабный коэффициент для оси y.
scale.zМасштабный коэффициент для оси z.
scaleСреднее из всех трех масштабных коэффициентов.
translation.xПеренос по оси х.
translation.yПеренос по оси y.
translation.zПеренос по оси z.
translationПеренос по оси х и у. Значение NSSize или CGSize.

CGPoint предоставляет следующие поля:

Поле структурыОписание
xКомпонента точки х.
yКомпонента точки y.

CGSize предоставляет следующие поля:

Поле структурыОписание
widthКомпонента размера ширина.
heightКомпонента размера высота.

CGRect предоставляет следующие поля:

Поле структурыОписание
originНачало прямоугольника в виде CGPoint.
origin.xКомпонента x начала прямоугольника.
origin.yКомпонента y начала прямоугольника.
sizeРазмер прямоугольника, как CGSize.
size.widthКомпонента ширины размера прямоугольника.
size.heightКомпонента высоты размера прямоугольника.

Вы не можете указывать структуру поля ключем пути с помощью свойства Objective-C 2.0. Это не сработает:

myLayer.transform.rotation.x=0;

Вместо этого вы должны использовать setValue:forKeyPath: или valueForKeyPath: как показано ниже:

[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];
 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac