ターン間のアニメーションを含む iPhone 用のターン ベースのゲームを作成しています。[UIView animateWithDuration:...] メソッドのインライン コード呼び出しを待ちたいと思います。この呼び出しを非同期ではなく同期的に行う方法はありますか? 現在、私がしていることは...
// Some code...
NSConditionLock *conditionLock = [[NSConditionLock alloc] initWithCondition:0];
dispatch_sync(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1
animations:^{
// some animation
}
completion:^(BOOL finished){
[conditionLock lock];
[conditionLock unlockWithCondition:1];
}];
});
// forces thread to wait until completion block is called
[conditionLock lockWhenCondition:1];
// More code...
したがって、上記のコードでは、アニメーションが完全に終了した後にのみ「// More code...」に到達します。明らかに、このコードはセカンダリ スレッドで実行する必要があり、希望どおりに動作します。ただし、NSConditionLock を gcd と組み合わせて使用するのは悪い形式であり、この方法でセカンダリ スレッドをブロックすることはパフォーマンスにとって最適ではないと感じています。私の現在のコードは大丈夫ですか、それともこれを行うためのより良い方法はありますか? ありがとう。
編集:重要な点は、「// more code...」がインラインであり、完了ブロックにないことです。本当に私が知りたいのは、NSConditionLock を GCD と組み合わせて使用しても大丈夫ですか?そうでない場合、より良い方法は何ですか?