【问题标题】:How to Key-Value-Observe the rotation of a CALayer?如何 Key-Value-Observe 一个 CALayer 的旋转?
【发布时间】:2009-08-11 14:23:43
【问题描述】:

我可以像这样访问值:

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 旋转。有没有其他方法可以访问和观察它?

【问题讨论】:

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


    【解决方案1】:

    CALayertransform 属性是一个结构,而不是一个对象,因此它不符合 KVC。

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

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

    【讨论】:

    • 似乎根本无法观察。我可以观察背景颜色。但是当我在 layer.transform 上尝试它时,旋转没有任何反应。当我将图层设置为观察者对象并为 keyPath 设置“变换”时,同样的问题。好像没有办法观察变换矩阵的变化。
    • 这里也一样。看起来你根本无法观察到它。糟糕。这可能是 Apple 希望在动画期间远离的性能问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多