我可以这样访问该值:
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 轴旋转。还有其他方式访问和观察它吗?
The transform
财产为CALayer
是一个结构体,而不是一个对象,因此它不符合 KVC。
您应该能够做的是,绑定到变换属性并在收到 KVO 通知时拉出 Z 值,而不是绑定到 Z 旋转。
我认为这里的困惑在于,当你在 NSObject 上使用点表示法时,你实际上是在使用该对象的- (id)property
and - (void)setProperty
方法,符合 KVC 标准。当您在结构上使用点表示法时,您正在访问该结构的成员,而不是调用方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)