Как Key-Value-Наблюдать вращение CALayer? - PullRequest
2 голосов
/ 11 августа 2009

Я могу получить доступ к значению, как это:

NSNumber* rotationZ = [myLayer valueForKeyPath:@"transform.rotation.z"];

Но по какой-то причине, если я пытаюсь KV-наблюдать этот ключевой путь, я получаю ошибку компилятора. Во-первых, вот как я пытаюсь это сделать:

[myLayer addObserver:self forKeyPath:@"transform.rotation.z" options:0 context:nil];

Компилятор говорит мне:

*** Завершение работы приложения из-за необработанного исключения NSUnknownKeyException, причина: '[ addObserver: forKeyPath: @ "вращение.z" опции: 0x0 context: 0x528890] было отправлено к объекту, который не соответствует KVC для свойства поворота. '

я не понимаю, почему я могу получить доступ к этому значению z по ключевому пути KVC, но не могу добавить к нему наблюдателя. Имеет ли это смысл?

Как еще можно наблюдать значение z этой матрицы? Меня не волнуют другие значения матрицы. Только вращение по оси Z. Любой другой способ получить доступ и наблюдать это?

1 Ответ

1 голос
/ 11 августа 2009

Свойство transform для CALayer является структурой, а не объектом, поэтому оно не совместимо с KVC.

То, что вы должны сделать, это вместо привязки к повороту Z привязать к свойству transform и извлекать значение Z всякий раз, когда вы получаете уведомление KVO.

Я думаю, что путаница заключается в том, что когда вы используете точечную запись в NSObject, вы действительно используете методы - (id)property и - (void)setProperty этого объекта, которые соответствуют KVC. Когда вы используете точечную запись в структуре, вы получаете доступ к члену этой структуры, а не к вызову метода.

...