我有一個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. 逐個顯示數組的元素 - jquery
- 2. 以Angular js的形式逐個顯示數組元素
- 3. 逐個顯示Arraylist的元素
- 4. Ruby顯示每個元素
- 5. 逐步顯示每個div
- 6. 顯示列表中的每個元素
- 7. 顯示數組的第一個元素
- 8. 爲元素數組中的每個元素賦值每個元素jQuery
- 9. php:關聯數組的每個元素的顯示鍵和值
- 10. 如何顯示每個數組元素的值?
- 11. 逐個顯示每個結果
- 12. 逐個顯示每個結果
- 13. 更改數組中的每個元素
- 14. 命名數組中的每個元素
- 15. 驗證數組中的每個元素?
- 16. 打印數組中的每個元素
- 17. 如何在matlab中以特定格式逐個元素地顯示數組
- 18. 由python中的同一個數組中的每個元素添加數組中的每個元素
- 19. 顯示最後一個數組元素
- 20. JQuery的+顯示下一個元素逐個
- 21. 將一個數組中的每個元素與另一個數組的每個元素相乘的方式?
- 22. 將數組中的每個元素與第二個數組中的每個元素相乘
- 23. PHP將數組元素添加到另一個數組中的每個元素
- 24. 數組元素的數組少於Python中每個元素的截斷數組
- 25. 將一個數組的每個元素連接到ruby中其他數組的每個元素
- 26. 每個N元素的新數組
- 27. 每個數組元素的監聽器
- 28. 顯示HTML中的foreach數組中的第一個元素
- 29. 顯示一個數組中的前4個元素和另一個數組中的前1個元素,直到存在數組元素
- 30. 創建每個數組的第一個元素的數組
'for(int i = 0;我<[yourArray count]; ++ i)' – nhgrif
@nhgrif問題是如何在每個元素之間以3秒的延遲逐個顯示每個元素。 – godel9
「NSTimer」有什麼問題? – nhgrif