1

我正在为 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 结合使用是不好的形式,并且以这种方式阻塞辅助线程对于性能来说并不是最佳的。我当前的代码还可以吗,还是有更好的方法来做到这一点?谢谢。

编辑:关键是“//更多代码...”是内联的,而不是在完成块中。真的我想知道的是,将 NSConditionLock 与 GCD 结合使用是否可以,如果不是更好的方法是什么?

4

1 回答 1

2

我只是将“//更多代码”放在另一个方法中,然后在完成块中调用该方法。这将确保您的代码仅在动画完成后才被触发。

于 2012-08-17T15:57:46.067 回答