在 iOS7 中,我们遇到了一个间歇性错误。iOS6没有发生这种情况。
它不会立即开始,而是在游戏开始约 30 秒到约 2 分钟后,所有动画和 dispatch_after 命令都会立即发生。
更具体地说,动画就像“duration:”值是 0 一样发生,即使它绝对不是 0。更具体地说,dispatch_after 就像 wait = 0 一样发生。
一旦启动,它就会一直持续到软件终止。
我不知道如何调试它,或者它是否是 iOS7 错误。任何想法/帮助将不胜感激!
在 iOS7 中,我们遇到了一个间歇性错误。iOS6没有发生这种情况。
它不会立即开始,而是在游戏开始约 30 秒到约 2 分钟后,所有动画和 dispatch_after 命令都会立即发生。
更具体地说,动画就像“duration:”值是 0 一样发生,即使它绝对不是 0。更具体地说,dispatch_after 就像 wait = 0 一样发生。
一旦启动,它就会一直持续到软件终止。
我不知道如何调试它,或者它是否是 iOS7 错误。任何想法/帮助将不胜感激!
您认为您的完成块被过早调用的问题是什么?
如果是这样,您是否检查过传递给完成块的布尔值的值?如果布尔值为真,您可能只想执行该块中的语句。
例如
[UIView animateWithDuration... animations:^{
//do something
} completion:^(BOOL finished) {
if (finished) {
// do something
}
}];
我在动画开始之前调用完成块时看到了这一点,但实际上是因为其他东西取消了动画,因此finished = NO
.
这并没有回答有关 的问题dispatch_after
,因此您可能仍然遇到错误。
您的问题听起来好像您没有在主线程上调用动画和调度。这会导致意外行为,例如视图直到某个时间点才更新或移动。
请尝试在 dispatch_main 中移动动画块,如下所示:
dispatch_async(dispatch_get_main_queue(), ^{
<# Code #>
});
看看它是否能解决问题。
问题标题和描述似乎有所不同(不清楚理解),无论如何,如果您想在某个时间后生成任务,请看下面
dispatch_after 和 [UIView 动画:持续时间] 立即发生
这可以工作:
// Do your stuff OR animations then use below for DISPATCH_AFTER...
double delayInSeconds = 2.0f;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// Do your Stuff Or Add Animation
[UIView animateWithDuration:.6f animations:^{
self.tableView.contentOffset = CGPointMake(0, 173);
}];
});