画面上でいくつかのオブジェクトを順番に動かすコードを書きました。各オブジェクトの移動が完了すると、次のオブジェクトが開始されます。
コードは次のように構成されています。
モデル:
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];
で数回ヒットします。その後、時々、に設定され、デバッグを続行した後、すべてのアニメーションが画面上で実行されます。finished
true
finished
false
編集:
ただし、コードを変更して、 moveObject が呼び出されたときにオブジェクトを移動しない場合があり、代わりにアクションなしで戻り、ユーザーがオブジェクトを移動するのを待つ (したがって、デリゲートのmoved:
セレクターを介してこのコードにコールバックする) と、短い一連のアニメーションが連続して発生します。
つまり、問題はコードが無限ループにある場合にのみ発生するようです。
何がうまくいかないのですか?