2015-09-26 80 views
3

我的動畫速度太快了。我正在做一個模式匹配遊戲,我有4個不同顏色的UIViews。我想要一個人眨眼,然後等一會兒,再有一個UIView眨眼。視圖閃爍了我的標籤標識符,我已經爲每個視圖設置了不同的值(1,2,3,4)。看起來他們都在同一時間。我已經嘗試調整animateWithDuration函數的值,這似乎沒有幫助。動畫過快。似乎無法減慢

這裏是我的打印輸出,所以你可以看到它執行正確的順序...

gary 
3 
gary 
2 
gary 
2 
gary 
3 
gary 
2 



func beginGame() { 
    var level = 5 

    for _ in 1...level { 
     self.randomNumber = Int(arc4random_uniform(4)) + 1 
     let originalColor:UIColor = self.view.viewWithTag(randomNumber)!.backgroundColor! 
     UIView.animateWithDuration(1, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 


      self.view.viewWithTag(self.randomNumber)!.backgroundColor = UIColor.whiteColor() 
       self.view.viewWithTag(self.randomNumber)!.backgroundColor = originalColor 

      print("gary") 


      }, completion: nil) 
     print(randomNumber) 

     enemyArray.append(randomNumber) 

    } 
} 

//新代碼

func beginGame(){ 

    var level = 5 

    for _ in 1...level { 
     self.randomNumber = Int(arc4random_uniform(4)) + 1 
     let originalColor:UIColor = self.view.viewWithTag(randomNumber)!.backgroundColor! 
     UIView.animateWithDuration(1, delay: 4, options: UIViewAnimationOptions.CurveEaseOut, animations: { 


      self.view.viewWithTag(self.randomNumber)!.backgroundColor = UIColor.whiteColor() 
       self.view.viewWithTag(self.randomNumber)!.backgroundColor = originalColor 

      print("gary") 


      }, completion: nil) 

     print(randomNumber) 

     enemyArray.append(randomNumber) 

    } 




} 
+0

您是否嘗試過在animateWithDuration方法中增加延遲,以便四個不同的動畫不會同時觸發? –

+0

是的,我有。我玩過兩個值。 –

+0

你基本上是在同一時間做所有的動畫。 for循環將所有動畫排隊,然後它們全部同時運行。增加每個延遲,等待直到前一個完成。 – rmaddy

回答

0

聽什麼人都告訴你。如果您使用for循環並創建所有延遲值均爲0的多個動畫,則它們都將同時運行。不要這樣做。

相反,使用代碼更是這樣的:

let pauseBetweenAnimations = 1.0 
for step in 1...level { 
    self.randomNumber = Int(arc4random_uniform(4)) + 1 
    let originalColor:UIColor = 
    self.view.viewWithTag(randomNumber)!.backgroundColor! 
    UIView.animateWithDuration(1, delay: (step - 1) * pauseBetweenAnimations, 
    options: UIViewAnimationOptions.CurveEaseOut, 
    animations: 
    //the rest of your code goes here... 

這將使每個後續動畫一前一後開始1秒。如果1秒太長,請更改pauseBetweenAnimations的值。

+0

我很抱歉,但代碼也沒有工作。它不喜歡步驟-1。你可以添加更多的功能,所以我可以複製並粘貼,看看它會按邏輯工作嗎?我也調整了過去的延遲,也沒有效果。 –

+0

您可能需要添加一個類型轉換以將(步驟-1)轉換爲Double。試試這個:'UIView.animateWithDuration(1,delay:Double(step-1)* pauseBetweenAnimations –

+0

我認爲它喜歡Int的不是前一次嘗試的兩倍,step甚至有一個數值嗎? –