2013-12-08 5 views
1

У меня есть массив SKSpriteNodes (хотя для целей этого вопроса они также могут быть UIViews [концепция должна быть одинаковой в любом случае]). Я пытаюсь добавить первый элемент в представление, начать 3-секундную задержку, добавить второй элемент в представление, начать 3-секундную задержку и т. Д. Моя первоначальная мысль была бы рекурсивной функцией с использованием NSTimer, но я не уверен, что это лучший способ. Какие-нибудь советы?Отображение каждого элемента массива по одному

+0

'for (int i = 0; i <[yourArray count]; ++ i) ' – nhgrif

+0

@nhgrif Вопрос состоял в том, как отображать каждый элемент один за другим с задержкой в ​​3 секунды между каждым элементом. – godel9

+0

И что случилось с 'NSTimer'? – nhgrif

ответ

2

Вариант 1

Использование SKAction с performSelector:

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]; 

Вот некоторые ссылки для использования блоков:

+0

Хм, это похоже на приятное решение. Я относительно незнакома с концепцией блоков, но есть ли у вас хорошие ссылки? Кроме того, что, если время задержки должно быть в состоянии изменить элементы ч/б, добавляемые? Будет ли это решение масштабироваться по этому сценарию? – Monkeyanator

+0

@Monkeyanator Хм ... Блоки довольно сложны. Они являются формой закрытия, поэтому, если вы не знакомы с закрытием, тогда может быть крутая кривая обучения. Я добавил второй вариант, который позволяет избежать блоки, которые могут работать лучше для вас. – godel9

+0

Хорошо, спасибо вам большое! – Monkeyanator

Смежные вопросы