Ios 当某些条件为真时,如何重复操作?

Ios 当某些条件为真时,如何重复操作?,ios,algorithm,swift,sprite-kit,Ios,Algorithm,Swift,Sprite Kit,当某些条件为真时,我希望上述操作不断重复。我该怎么做 我知道我可以使用runAction(action)运行一次操作,或者使用runAction(SKAction.repeatActionForever(action))永远重复操作。但是,当某些条件为真时,我如何才能重复它 如果使用操作无法做到这一点,那么在某些条件为真时,是否有其他方法可以重复这些步骤(显然,在另一个线程上,我不想冻结我的应用程序): 1) 等一下 2) 执行一段代码 3) 检查条件是否为真。如果是,请停止重复。否则,重复 我

当某些条件为真时,我希望上述操作不断重复。我该怎么做

我知道我可以使用
runAction(action)
运行一次操作,或者使用
runAction(SKAction.repeatActionForever(action))
永远重复操作。但是,当某些条件为真时,我如何才能重复它

如果使用操作无法做到这一点,那么在某些条件为真时,是否有其他方法可以重复这些步骤(显然,在另一个线程上,我不想冻结我的应用程序):

1) 等一下

2) 执行一段代码

3) 检查条件是否为真。如果是,请停止重复。否则,重复


我不太愿意使用
sleep()
,因为这听起来是一个糟糕的解决方案,而且苹果不允许在他们的商店中使用应用程序

您可以使用SKAction的

  • (SKAction*)运行块:(调度块)块 队列:(调度队列)队列
您可能希望创建一个块。在内部,只需检查变量,然后相应地应用您的逻辑,一旦条件不再为真,您就可以将其从对象中删除

如果要修改变量,请在其声明前添加_块

var action = SKAction.sequence([
                 SKAction.waitForDuration(1),
                 SKAction.runBlock({
                      //Some code
                 })
             ])

像苹果派一样简单我的孩子

使用Swift的替代解决方案:

SKAction *logic = [SKAction runBlock:^{ 
if (myvar){
NSLog(@"hello world!");}
else
{
 //remove actions
}} queue : dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];

SKAction *delay = [SKAction waitForDuration: 0.5];

SKAction *mySequence = [SKAction sequence:@[logic,delay,nil]];

[myNode runAction:mySequence];

对不起,我有点困惑。你能举个小例子吗?我不确定我将如何整合“waitForDuration”。
runAction(
     SKAction.repeatActionForever (
           SKAction.sequence([
                SKAction.waitForDuration(1),
                SKAction.runBlock({
                      //Code you want to execute
                      if conditionIsTrue {
                            self.removeActionForKey("New Thread")
                      }           
                })
           ])
     ),
     withKey: "New Thread"
)