作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以这样访问该值:
NSNumber* rotationZ = [myLayer valueForKeyPath:@"transform.rotation.z"];
但由于某种原因,如果我尝试 KV 观察该关键路径,则会收到编译器错误。首先,我尝试这样做:
[myLayer addObserver:self forKeyPath:@"transform.rotation.z" options:0 context:nil];
编译器告诉我:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ addObserver: forKeyPath:@"rotation.z" options:0x0 context:0x528890] was sent to an object that is not KVC-compliant for the "rotation" property.'
我不明白的是,为什么我可以通过 KVC 键路径访问该 z 值,但不能向其添加观察者。这有道理吗?
我还能如何观察该矩阵的 z 值?我不关心矩阵的其他值。仅 Z 轴旋转。还有其他方式访问和观察它吗?
最佳答案
CALayer
的 transform
属性是一个结构体,而不是一个对象,因此它不符合 KVC 标准。
您应该能够做的是,绑定(bind)到变换属性并在收到 KVO 通知时拉出 Z 值,而不是绑定(bind)到 Z 旋转。
我认为这里的困惑在于,当您在 NSObject 上使用点表示法时,您实际上是在使用该对象的 - (id)property
和 - (void)setProperty
方法,符合 KVC 标准。当您在结构上使用点表示法时,您正在访问该结构的成员,而不是调用方法。
关于iphone - 如何键值观察 CALayer 的旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260704/
我是一名优秀的程序员,十分优秀!