【发布时间】:2015-12-09 11:21:43
【问题描述】:
我需要有关此 while 循环的帮助 - 我正在尝试做的是减慢删除和添加新圆的整个过程,而每次发生这种情况时,半径都会发生变化。我变得非常绝望,我尝试在循环中同时使用 dispatch_after 和 sleep (我在网上找到),但它们都不合适,它们基本上会停止整个应用程序。如果我将它们放在 while 循环中,则不会发生任何事情。提前致谢!
while radius < 100 {
self.removeAllChildren()
addCircle()
radius++
print(radius)
}
【问题讨论】:
-
[NSThread sleepForTimeInterval:number of seconds you want to wait before next iteration];在循环内就可以了。这是在目标 C 中。寻找它的 Swift 等价物。 -
这里是它的Apple Documentation。它将使正在运行的任何线程进入睡眠状态。如果我是你,我会将循环分派到另一个线程并在那里调用它,让该线程进入睡眠状态,同时享受完整的工作主线程。
-
但是如果循环被分派到另一个线程从而使该线程而不是主线程进入睡眠状态,它不会工作吗? (由于我没有在 GCD 和线程方面做太多工作,我不确定,如果这是一个幼稚的问题,我很抱歉)@DanielT。
-
@DanielT。 This Code 为我工作。我可以在我的应用程序上工作,而循环一直在后台运行,每次迭代都有延迟
-
OP 显然使用了 SpriteKit ... 那么为什么不使用 SKAction 序列(它将等待并添加节点)。在这种情况下完全没有必要使用 GCD。此外 NSTimer 或 dispatch_... 方法不尊重场景(或节点)的暂停状态,并且 SKAction 或 update: 方法及其传递的 currentTime 参数是 SpriteKit 中与时间相关的操作的首选方式。
标签: swift sprite-kit