逐个显示数组的每个元素

时间:2013-12-08 16:38:08

标签: iphone objective-c recursion

我有一个SKSpriteNodes数组(虽然,为了这个问题的目的,他们也可能是UIViews [概念应该是相同的两种方式])。我试图将第一个元素添加到视图,开始3秒延迟,将第二个元素添加到视图,开始3秒延迟等等。我最初的想法是使用NSTimer的递归函数,但我是不确定这是最好的方式。有小费吗?

1 个答案:

答案 0 :(得分:2)

选项1

SKActionperformSelector

一起使用
self.nextIndex = 0;
SKAction *action = [SKAction sequence:@[[SKAction waitForDuration:3.0],
                                        [SKAction performSelector:@(addNextItem) onTarget:self]]];
[self runAction:action];

然后,定义addNextItem

- (void)addNextItem
{
    [self addChild:myArray[self.nextIndex++]];
    if(self.nextIndex < [myArray count]) {
        SKAction *action = [SKAction sequence:@[[SKAction waitForDuration:self.nextWait],
                                                [SKAction performSelector:@(addNextItem) onTarget:self]]];
        [self runAction:action];
    }
}

选项2

如果你熟悉块,你也可以使用块来做这类事情:

__block NSUInteger index = 0;
void (^addItem)(void) = ^(void) {
    SKNode *node = myArray[index++];
    [self addChild:node];
};
SKAction *action = [SKAction sequence:@[[SKAction waitForDuration:3.0],
                                        [SKAction runBlock:addItem],
                                        [SKAction waitForDuration:3.0],
                                        [SKAction runBlock:addItem],
                                        [SKAction waitForDuration:3.0],
                                        [SKAction runBlock:addItem],
                                        [SKAction waitForDuration:3.0],
                                        [SKAction runBlock:addItem]]];
[self runAction:action];

以下是使用块的一些参考: