具体的には、以外のタイプのプロパティで CA を使用しようとしています。
- 整数と倍精度
- CGRect、CGPoint、CGSize、および CGAffineTransform 構造体
- CATransform3D データ構造
- CGColor と CGImage のリファレンス
および CALayers または NSViews 以外のオブジェクト内
具体的には、以外のタイプのプロパティで CA を使用しようとしています。
および CALayers または NSViews 以外のオブジェクト内
自分で変更を行うことができ、使用するクラスがカスタムである場合は、クラスに setProgress:(float) f メソッドを追加し、CA を使用してアニメーション化し、必要に応じて目的のプロパティを f の関数として変更することをお勧めします。 .
ただやる
[[someObject animator] setValue:[NSNumber numberWithFloat:1.0] forKeyPath:@"someCustomProperty.progress"];
または、オブジェクトにアニメーターがない場合は、正しい CAAnimation を自分で作成します。
うーん、どうもできないみたいですね。私がすべきことは [NSAnimation のサブクラス化]( https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/AnimationGuide/Articles/TimingAnimations.html NSAnimation のサブクラス化) です。これは MacOS 10.4+ アプリでは機能しますが、NSTimer を使用する以外に代替手段が見つからない Cocoa Touch では機能しません。
何をしようとしているのか正確にはわかりませんが、他のプロパティで CA を使用したい場合は問題ありません。キーパスに適切なアクションを登録するだけです。CAActionを使用して、Apple の Core Animation ドキュメントにこれを行う例があります。具体的には、 actionForLayer:forKey: を実装して、そのキーのデフォルトのアニメーション動作を設定します。プロパティ アニメーションを暗黙的に作成する場合は、 runActionForKey:object:arguments: を実装します。
CALayers 以外のオブジェクトのアニメーションについては、よくわかりません。レイヤーは、コア アニメーションのルート ビジュアル エンティティです。さらに、iPhone では、すべての UIView がレイヤーに支えられています。iPhone の画面にレイヤーにないものがあるとは思わないので、そうでないものにアニメーションを使用することを心配する理由がわかりません。 CALayer.