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];
                     }];
}

コードは正常に実行されているように見えますが、画面上ではアニメーションがバッチにグループ化されています。一度に多数のアニメーションが発生し、別のグループがすべて開始されます。

行にブレークポイントを配置すると、アニメーションが画面に表示されずに設定された状態[model moveObject];で数回ヒットします。その後、時々、に設定され、デバッグを続行した後、すべてのアニメーションが画面上で実行されます。finishedtruefinishedfalse

編集

ただし、コードを変更して、 moveObject が呼び出されたときにオブジェクトを移動しない場合があり、代わりにアクションなしで戻り、ユーザーがオブジェクトを移動するのを待つ (したがって、デリゲートのmoved:セレクターを介してこのコードにコールバックする) と、短い一連のアニメーションが連続して発生します。

つまり、問題はコードが無限ループにある場合にのみ発生するようです。

何がうまくいかないのですか?

4

0 に答える 0