画面上でいくつかのオブジェクトを順番に動かすコードを書きました。各オブジェクトの移動が完了すると、次のオブジェクトが開始されます。
コードは次のように構成されています。
モデル:
moveObject
{
// Code to move the object
...
[delegate moved:self];
}
デリゲート (コントローラー):
moved:(MyClass *)o
{
UIView* v = [self viewForObject:o];
[UIView animateWithDuration:1.0
animations:^{
[v setCenter: [model center]];
}
completion:^(BOOL finished){
// Move object
[model moveObject];
}];
}
これが実際には正しく機能しないという事実を除けば、概念的には正しくないように思えます。モデル内のロジックは、ビューをさらに更新する準備ができていることをコントローラーに通知するのを待つことなく、自由に物事を動かし続ける必要があります。
私の計画は、アニメーションが必要な保留中のアクションのキューを作成し、モデルがアニメーション化が必要なものを更新するたびに、それをキューに追加して続行させることです。次に、アクションをキューから取り出して、一度に 1 つずつアニメートすることができました。
これは、オブジェクトが移動されたときにモデルにコールバックし続ける別のコントローラーを作成する必要なく、ビューをまったく使用せずにモデルを使用できることも意味します。
このための独自のソリューションに取り掛かる前に、Apple の API でこれを処理するコードが既に存在するのでしょうか? それを処理する標準的な方法があるほど、それは十分に一般的な問題のようです。
または、実行時にアニメーションのチェーンを構築するためのより良い方法はありますか? (完了ブロックを使用して単純にハードコーディングするのではなく)。