【发布时间】:2012-08-17 15:54:29
【问题描述】:
我正在为 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 结合使用是否可以,如果不是更好的方法是什么?
【问题讨论】:
-
这种方法的问题不是你在辅助(即不是主)线程上运行“一些动画”吗?顺便说一句,是什么(参考)让您认为将 NSConditionLock 与 GCD 结合是不好的形式?
标签: iphone objective-c grand-central-dispatch uiviewanimation