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 に答える