2012-04-04 11 views
3

私は鎖として動かなければならない複数のアニメーションを持っています。 これを処理してきた方法は、completionHandlerを使用して次のアニメーションブロックを実行することです。 これに対処するクリーナーの方法はありますか?iOS - 複数のアニメーションブロック?

[UIView animateWithDuration:1 animations^{ 

     // perform first animation 
    }completion:(BOOL finished){ 

      [UIView animateWithDuration:1 animations^{ 

       // perform second animation 
      }completion:(BOOL finished){ 

     }]; 

}]; 
+0

ブロックを使用すると、きれいな結果が得られます。参照:http://xibxor.com/objective-c/uiview-animation-without-nested-hell/ –

答えて

10

彼らは順番に起動するように、また、千鳥遅延でanimateWithDuration:delay:options:animations:completion:を使用することができますが、一般的にそれは完了ブロックでそれらを行うことをお勧めします。

(私は私の頭の上にこれをオフに入力していますので、それがコンパイルされない場合があります)だけでブロックを考慮、そこにいくつかあり、それは読み、コードを困難だ場合:

typedef void (^AnimationBlock)(); 

AnimationBlock firstAnimation = ^{ ... }; 
AnimationBlock secondAnimation = ^{ ... }; 

[UIView animateWithDuration:1 animations:firstAnimation completion:(BOOL finished) { 
    [UIView animateWithDuration:1 animations:secondAnimation];}]; 

あなたにUIViewにカテゴリを作成して、そのようなブロックの配列を取り、それらを一緒に連鎖させることができますが、すべてのコーナーケースに対処する必要があります。どのようにタイミングを定義しますか?どのように中止されたアニメーションなどを扱うのですか?上記はおそらくほとんどの場合の最良のアプローチです。

1

これについては、blog postと書いています。私のアプローチは、ブロックやその他のアニメーションプロパティをカプセル化するアニメーションオブジェクトを作成することです。そのようなオブジェクトの配列を別のアニメーションオブジェクトに渡すことができます。このアニメーションオブジェクトを順番に実行します。コードはGitHubにあります。

関連する問題