У меня есть массив SKSpriteNodes (хотя для целей этого вопроса они также могут быть UIViews [концепция должна быть одинаковой в любом случае]). Я пытаюсь добавить первый элемент в представление, начать 3-секундную задержку, добавить второй элемент в представление, начать 3-секундную задержку и т. Д. Моя первоначальная мысль была бы рекурсивной функцией с использованием NSTimer, но я не уверен, что это лучший способ. Какие-нибудь советы?Отображение каждого элемента массива по одному
ответ
Вариант 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];
Вот некоторые ссылки для использования блоков:
Хм, это похоже на приятное решение. Я относительно незнакома с концепцией блоков, но есть ли у вас хорошие ссылки? Кроме того, что, если время задержки должно быть в состоянии изменить элементы ч/б, добавляемые? Будет ли это решение масштабироваться по этому сценарию? – Monkeyanator
@Monkeyanator Хм ... Блоки довольно сложны. Они являются формой закрытия, поэтому, если вы не знакомы с закрытием, тогда может быть крутая кривая обучения. Я добавил второй вариант, который позволяет избежать блоки, которые могут работать лучше для вас. – godel9
Хорошо, спасибо вам большое! – Monkeyanator
- 1. Отображение каждого элемента массива на новой линии
- 2. Перемещение каждого элемента вниз по одному в массиве (Java)
- 3. Объединение каждого элемента массива
- 4. Изменение каждого элемента массива
- 5. Анимация каждого элемента массива Javascript
- 6. Отображение каждого элемента в массиве JS отдельно
- 7. Отображение элементов массива по одному в форме в Angular js
- 8. расчет для каждого элемента массива
- 9. Отображение вопросов опроса по одному MVC mobile
- 10. Переменная для каждого элемента массива
- 11. длина каждого элемента массива Java
- 12. Реорганизация каждого элемента третьего массива
- 13. $ .getScript для каждого элемента массива
- 14. цикла массива для каждого элемента
- 15. цикл для каждого элемента массива?
- 16. Сумма элементы каждого элемента массива
- 17. Изменение цвета каждого элемента массива
- 18. Положение каждого элемента инициализатора массива
- 19. Вызов функции каждого элемента массива
- 20. MVC и дизайн модели - по одному для каждого json-действия? по одному для каждого представления?
- 21. Затухание каждого слова слайда по одному
- 22. присвоение элемента 2D массива одному указателю
- 23. Метод массива для циклирования для каждого элемента
- 24. Сортировка массива строк по подстроке каждого элемента C#
- 25. Удаление пробелов в начале каждого элемента массива
- 26. размер каждого элемента массива структуры в с
- 27. Создайте запрос mysql для каждого элемента массива
- 28. Алгоритм: извлечение каждого 4-го элемента массива
- 29. Как вычесть два элемента векторов по одному?
- 30. Rails - отображение подстроки каждого элемента в сопоставленной матрице
'for (int i = 0; i <[yourArray count]; ++ i) ' – nhgrif
@nhgrif Вопрос состоял в том, как отображать каждый элемент один за другим с задержкой в 3 секунды между каждым элементом. – godel9
И что случилось с 'NSTimer'? – nhgrif