我正在爲包含動畫之間的轉動的iPhone創建一個基於回合的遊戲,並且我想在代碼中內聯[UIView animateWithDuration:...]方法調用。有沒有辦法讓這個調用同步而不是異步?目前,我在做什麼是...iPhone:等到UIView動畫完成
// 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...
因此,在上面的代碼中,「//更多代碼...」只是動畫後已經完全結束爲止。很顯然,這段代碼必須在輔助線程上運行,並且可以按我的需要工作。但是,我有一種感覺,使用NSConditionLock和gcd的組合是不好的形式,並且以這種方式阻止輔助線程對於性能來說並不是最佳的。我目前的代碼是否正常,還是有更好的方法來做到這一點?謝謝。
編輯: 關鍵是「// code more ...」是內嵌的,而不是在完成塊中。 真的是我想知道的是,將NSConditionLock與GCD結合使用是否合適,如果不是,更好的方法是什麼?
這種方法的問題不是你在輔助線程(即不是主線程)上運行「某些動畫」嗎?順便說一下,什麼(參考)讓你認爲把NSConditionLock和GCD結合起來是不好的形式? – Drux 2013-08-24 06:11:37