web-dev-qa-db-ja.com

CABasicAnimationkeyPathの値を知るにはどうすればよいですか

私はこのようないくつかのコードを見つけます:

CABasicAnimation *anim = [CABasicAnimation animation];
anim.keyPath = @"transform.scale";
anim.fromValue = [NSNumber numberWithFloat:1.0];
anim.toValue = [NSNumber numberWithFloat:0];
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeBoth;
anim.delegate = self;
[self.view.layer addAnimation:anim forKey:@"scaleOut"];

そして

anim.keyPath = @"transform.rotation.x";

私の知る限り、keyPathは連鎖メソッドの呼び出しです。 CALayerの「transform.scale」はaLayer.transform.scaleです。 「transform」はCALayerのプロパティであり、「scale」は変換の「プロパティ」です。ただし、CALayerのプロパティ変換はCATransform3Dです。

CATransform3Dには、「scale」または「rotation」という名前のプロパティはありません。

私の質問は:「スケール」と「回転」はkeyPathによってどのように識別されますか?

21
Sailing

Core Animationは、KVCを拡張して、レイヤーの一部の構造体タイプのプロパティのフィールド(または疑似フィールド)の直接アドレス指定をサポートします。この機能については、 Key-ValueコーディングへのCore Animation拡張機能 で説明されています。

27
Nikolai Ruhe

よくわかりませんが、おそらく役立つ解決策を見つけました。

IN Swift:文字列を書く代わりに、これを使用できます:

let shadowAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.shadowRadius))

CALayerと入力するとき。 <-オートコンプリートにより、使用可能なkeyPathが提供されます。

これがお役に立てば幸いです。

12
Ergün Inci