如何键值 - 观察CALayer的旋转?

时间:2009-08-11 14:23:44

标签: iphone cocoa-touch key-value-observing key-value-coding

我可以像这样访问这个值:

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

但由于某种原因,如果我尝试KV-观察该关键路径,我会收到编译器错误。首先,这是我尝试这样做的方式:

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

编译器告诉我:

  

***因未捕获的异常“NSUnknownKeyException”而终止应用,   原因:'[   addObserver:forKeyPath:@“rotation.z”   选项:0x0上下文:0x528890]已发送   到不符合KVC标准的对象   对于“轮换”属性。'

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

我怎么能观察到那个矩阵的z值?我不关心矩阵的其他值。只有z旋转。有没有其他方式来访问和观察它?

1 个答案:

答案 0 :(得分:1)

transform的{​​{1}}属性是结构,而不是对象,因此它不符合KVC。

你应该做的是,不是绑定到Z旋转,而是绑定到transform属性,并在收到KVO通知时拉出Z值。

我认为这里的混淆是当你在NSObject上使用点符号时,你真的使用了符合KVC的那个对象的CALayer- (id)property方法。在结构上使用点表示法时,您正在访问该结构的成员,而不是调用方法。