2009-08-11 11 views
2

私はこのような値にアクセスすることができます。Key-Value-CALayerのローテーションを観察する方法は?

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に準拠していないオブジェクトに送信されました "rotation"プロパティに使用しました。

私はKVCキーパスでz値にアクセスできますが、なぜオブザーバを追加しないのですか?これは理にかなっていますか?

他にどのようにその行列のz値を観測できましたか?私は行列の他の値については気にしません。 z回転のみ。それにアクセスしてそれを観察する他の方法はありますか?

答えて

1

CALayertransformプロパティはオブジェクトではなく構造体なので、KVCに準拠していません。

できることは、Z回転にバインドする代わりに、変換プロパティにバインドし、KVO通知を取得するたびにZ値を引き出すことです。

NSObjectでドット表記を使用すると、実際にはそのオブジェクトの- (id)property- (void)setPropertyのKVC準拠のメソッドを使用しているという混乱があると思います。構造体にドット表記法を使用すると、その構造体のメンバにアクセスし、メソッドを呼び出すことはありません。

+2

これはまったく観察できないようです。私はbackgroundColorを観察することができます。しかし、私がlayer.transformでそれを試してみると、何も起こりません。オブザーバオブジェクトとしてレイヤーを設定し、keyPathに "transform"を設定すると、同じ問題が発生します。変換行列の変化を観測する方法がないようです。 –

+0

同じです。あなたは単にそれを観察することができないように見えます。悪い。 Appleがアニメーション中に遠ざかりたいということは、おそらくパフォーマンス上の問題です。 – zumzum

関連する問題