6

在 iOS7 中,我们遇到了一个间歇性错误。iOS6没有发生这种情况。

它不会立即开始,而是在游戏开始约 30 秒到约 2 分钟后,所有动画和 dispatch_after 命令都会立即发生。

更具体地说,动画就像“duration:”值是 0 一样发生,即使它绝对不是 0。更具体地说,dispatch_after 就像 wait = 0 一样发生。

一旦启动,它就会一直持续到软件终止。

我不知道如何调试它,或者它是否是 iOS7 错误。任何想法/帮助将不胜感激!

4

3 回答 3

1

您认为您的完成块被过早调用的问题是什么?

如果是这样,您是否检查过传递给完成块的布尔值的值?如果布尔值为真,您可能只想执行该块中的语句。

例如

[UIView animateWithDuration... animations:^{
    //do something
} completion:^(BOOL finished) {
    if (finished) {
        // do something
    }
}];

我在动画开始之前调用完成块时看到了这一点,但实际上是因为其他东西取消了动画,因此finished = NO.

这并没有回答有关 的问题dispatch_after,因此您可能仍然遇到错误。

于 2013-10-08T17:34:08.893 回答
0

您的问题听起来好像您没有在主线程上调用动画和调度。这会导致意外行为,例如视图直到某个时间点才更新或移动。

请尝试在 dispatch_main 中移动动画块,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
    <# Code #>
});

看看它是否能解决问题。

于 2014-04-04T14:39:01.127 回答
0

问题标题和描述似乎有所不同(不清楚理解),无论如何,如果您想在某个时间后生成任务,请看下面

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);

                }];
            });
于 2014-04-01T05:22:25.473 回答