0

画面上でいくつかのオブジェクトを順番に動かすコードを書きました。各オブジェクトの移動が完了すると、次のオブジェクトが開始されます。

コードは次のように構成されています。

モデル:

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 でこれを処理するコードが既に存在するのでしょうか? それを処理する標準的な方法があるほど、それは十分に一般的な問題のようです。

または、実行時にアニメーションのチェーンを構築するためのより良い方法はありますか? (完了ブロックを使用して単純にハードコーディングするのではなく)。

4

0 に答える 0