iOS7 SpriteKit如何在恢复方法执行之前等待动画完成?

Ale*_*one 2 objective-c synchronous ios7 sprite-kit skaction

有没有办法让方法等待在方法中启动的SpriteKit操作在继续执行代码之前完成?这是我到目前为止所拥有的,但它只是在等待循环中挂起.

    __block BOOL  wait = YES;

    SKAction* move = [SKAction moveTo:destination duration:realMoveDuration];
    SKAction* sequence  = [SKAction sequence:@[[SKAction waitForDuration:0.07],move,[SKAction waitForDuration:0.07] ]];

    [spellEffect runAction:sequence  completion:^{
        [spellEffect removeFromParent];
        wait = NO;
    }];
    DLog(@"Waiting");
    while (wait) {

    }

    DLog(@"Done waiting");
Run Code Online (Sandbox Code Playgroud)

Log*_*gan 6

我认为你对块的执行有误解,苹果有很棒的文档:这里.你的while循环将无限运行,即使该块确实阻止它,使用该类型的系统来阻止你的主线程可能会在审查期间将你的应用程序击落.

你应该在街区内继续.例如,如果您想继续使用名为continueAfterAnimationIsDone的方法,则可以这样做

// Runs first
[spellEffect runAction:sequence  completion:^{
    [spellEffect removeFromParent];
    wait = NO;
    // Done
    // Runs third
    [self continueAfterAnimationIsDone]; // this method won't start until animations are complete.
}];
// Runs second
Run Code Online (Sandbox Code Playgroud)

请注意,当您声明块时,会捕获其中的代码并在后台线程上开始动画.其余的代码继续,所以你等待循环将开始.动画完成后,此块会执行,但它无法正确通知您的while循环,因此循环永远不会结束.如果你有进一步的问题,让我知道,块可能很奇怪.