2

我可以像这样访问值:

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

但由于某种原因,如果我尝试 KV 观察该密钥路径,则会出现编译器错误。首先,这就是我尝试这样做的方式:

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

编译器告诉我:

*** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[addObserver:forKeyPath:@"rotation.z" options:0x0 context:0x528890] 被发送到不符合 KVC 的“旋转”对象财产。'

我不明白的是,为什么我可以通过 KVC 密钥路径访问该 z 值,但不能向其添加观察者。这有意义吗?

我还能如何观察该矩阵的 z 值?我不关心矩阵的其他值。只有 z 旋转。还有其他方法可以访问和观察它吗?

4

1 回答 1

1

transform属性CALayer是一个结构,而不是一个对象,所以它不符合 KVC。

您应该能够做的是,而不是绑定到 Z 旋转,而是绑定到变换属性并在收到 KVO 通知时拉出 Z 值。

我认为这里的困惑在于,当您在 NSObject 上使用点表示法时,您实际上是在使用符合 KVC 的对象- (id)property- (void)setProperty方法。当您在结构上使用点表示法时,您访问的是该结构的成员,而不是调用方法。

于 2009-08-11T14:34:10.450 回答