对于iOS7,我们遇到了间歇性的错误。 iOS6没有发生这种情况。
它不会马上开始,但游戏中约30秒到2分钟,所有动画和dispatch_after命令都会立即发生。
更具体地说,动画正在发生,好像“duration:”值为0,即使它绝对不是0。 更具体地说,dispatch_after正好像wait = 0一样发生。
一旦启动,它将一直存在,直到软件终止。
我不知道如何调试它,或者它是否是iOS7错误。非常感谢任何/帮助!
答案 0 :(得分:1)
您认为您的完成块是否过早被调用?
如果是这样,你检查了传递到完成块的布尔值的值吗?如果布尔值为true,您可能只想执行该块中的语句。
e.g。
[UIView animateWithDuration... animations:^{
//do something
} completion:^(BOOL finished) {
if (finished) {
// do something
}
}];
我在动画开始之前调用完成块时看到了这个,但实际上是因为其他东西取消了动画,因此finished = NO
。
这不回答有关dispatch_after
的问题,因此您可能仍会遇到错误。
答案 1 :(得分:0)
问题标题和描述似乎有所不同(unClear to understand),无论如何你想在一段时间之后产生任务然后看下面
dispatch_after和[UIView animation:duration]立即发生
这可行:
// 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);
}];
});
答案 2 :(得分:0)
你的问题听起来好像你没有在主线程上调用动画和调度。这会导致意外行为,例如视图在某个时间点之前不会更新或移动。
请尝试在dispatch_main中移动动画块,如下所示:
dispatch_async(dispatch_get_main_queue(), ^{
<# Code #>
});
并查看它是否解决了问题。