0

我知道:

performSelector:afterDelay:还有这些,但我总是要为每次延迟做一个额外的方法。在Cocos2d-iphone我使用 a CCActionfor thatCCTimeDelay时,在 a 内CCSequence。如果它也可以在Cocos2d.

1.

如果我想等待,假设 1.3 秒并且不想因此将方法分成两半,我该怎么办?

2.

我知道当我想等待并且不改变上下文时,线程什么也不做。所以 performSelector 方法很适合。

如何做到这一点,不是整个应用程序都在等待,用户输入应该在等待时被接受。假设我要创建两个步骤的动画,其间应该有 0.8 秒的时间间隔。为了将其保留在一种方法中但使用多线程,我使用了(任何其他想法表示赞赏)。如何在块内等待,以免主线程受到干扰?

4

2 回答 2

3

GCD(Grand Central Dispatch)执行区块的方式怎么样?它将允许您将代码放在同一个地方,而无需额外的方法。

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    //  Do whatever you want
});

您可以dispatch_get_main_queue()用自己的队列替换。在Raywenderlich阅读更多

你不需要记住所有这些东西。只需开始dispatch_after在方法内部编写,Xcode 的代码感知就会为您提供代码片段以自动生成(正如 MartinR 在对问题的评论中指出的那样)

于 2013-09-11T08:12:37.687 回答
1

您可以使用:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay),
  dispatch_get_current_queue(), block);
于 2013-09-11T08:12:08.933 回答