0

SO の質問 ref と同様: UIView:animateWithDuration がすぐに完了するのはなぜですか? ただし、私のコードは [UIView beginAnimation] などを使用しています。

私は本質的にこれを持っています:

[UIView beginAnimation ...];
[UIView setAnimationDelay: 0.0];
[UIView setAnimationDuration: 1.25];
animatedImage.transform = "scale-up transform";

[UIView setAnimationDelay: 1.25]
[UIView setAnimationDuration: 0.50];
animatedImage.transform = "scale-down transform";

[UIView commitAnimation];

画像はすぐに拡大サイズにジャンプし、1.25 秒後に「縮小」サイズにうまくアニメーション化されます。さらにシーケンスをチェーンすると、最初のシーケンスを除いてすべて正しく機能します。

4

1 に答える 1

1

同じbeginAnimationゾーンにアニメーションを配置すると、同時にアニメーション化されます。

[UIView setAnimationDelay:1.25]を呼び出すと、以前の[UIView setAnimationDelay:0.0]のみが上書きされます。

つまり、UIViewは、スケールアップとスケールダウンの両方を同時に行うように指示されます。スケールアップとスケールダウンの両方を指示しているので、アニメーションの最後までスキップするだけですが、スケールアップを指示したので、アニメーション化せずにそれを実行します。

代わりにブロック構文を使用することをお勧めします。これにより、アニメーションの完了後に処理を実行できます。

[UIView animateWithDuration:1.25
                 animations:^{animatedImage.transform = "scale-up transform";}
                 completion:^(BOOL finished)
                 {
                     [UIView animateWithDuration:1.25
                                      animations:^{animatedImage.transform = "scale-down transform";}
                     ];
                 }
 ];

完了ブロックのコード(^ {code}構造は「ブロック」と呼ばれます)は、最初のアニメーションの後に発生するものです。これを好きなだけ多くのアニメーションにチェーンし続けることができます。

(BOOL終了)は、ブロックとともに渡されるパラメーターです。アニメーションが本当に終了したかどうかがわかります。いいえの場合、アニメーションは中断されました。

于 2011-10-27T12:52:14.117 に答える