2009-08-26 8 views
12

私はCocoa Touchでアニメーションがどのように機能するのだろうかと思っていました。たとえば、次のように[UIView beginAnimations]はどのように機能しますか?

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 

view1.alpha = 1.0; 
view2.frame.origin.x += 100; 

[UIView commitAnimations]; 

どうUIViewは、2つのビューのプロパティの変更を追跡していますか?

私はKVOが使用されていると思われますが、beginAnimationscommitAnimationsコールの間のすべてのビューの変更を実際に観察していますか?

任意の洞察力をいただければ幸いです!

答えて

12

簡単に説明:すべてのビューのための

すべてのアニメーションは単一スタックで処理されているが、beginAnimations:context:はスタックに新しいアクティブCAAnimationGroupをプッシュします、とcommitAnimationsは、現在アクティブなアニメーショングループをポップアップ表示されます。

スタックにアクティブなアニメーショングループがある場合、アニメーション可能なプロパティのすべてのセッターは、そのプロパティを処理してアクティブなアニメーショングループに追加するサブクラスインスタンスCAAnimationを作成します。

最後のアニメーションがポップされると、それが再生されます。

0

私はそれが古いCoreAnimation呼び出しの単なるラッパーであると信じています。 CoreGraphics APIを見ると、辞書に設定しなければならない複数のキーがあり、これらのキーの開始値と終了値を提供していることがわかります。

関連する問題