2014-11-01 83 views
1

我試圖爲我的視圖的背景多次動畫。例如(當然它需要是動態解決方案)4秒,每秒鐘它將從白色變爲黑色。我們所期望的: 第二:等到任務完成再次運行之前

  1. 白到黑到白
  2. 白到黑到白
  3. 白到黑到白
  4. 白到黑到白

我試着使用甚至延遲(調度延遲),它將只運行一次 並停止。這是我試過的。

for var index = 0; index < 3; ++index { 
    UIView.animateWithDuration(0.33333, delay: 0.333333, options: UIViewAnimationOptions.CurveEaseIn, animations: {() -> Void in 
     println(elapsedTime) 
     self.view.backgroundColor = UIColor.blackColor() 
    }) { (completed : (Bool)) -> Void in 
     UIView.animateWithDuration(0.333333, animations: {() -> Void in 
      self.view.backgroundColor = UIColor.whiteColor() 
     }) 
    } 
} 

關於如何運行這些命令的任何建議,請等到它們完成並再次運行它們?

回答

1

隨着for循環,你基本上設置所有四個動畫同時運行。如果你做的是動畫代碼的功能,你可以從完成塊遞歸調用它的白色動畫:

func animateBackground(times: Int) { 
    if times == 0 { return } 

    let blackAnimation = { self.view.backgroundColor = UIColor.blackColor() } 
    let whiteAnimation = { self.view.backgroundColor = UIColor.whiteColor() } 
    UIView.animateWithDuration(0.33333, delay: 0.333333, options: UIViewAnimationOptions.CurveEaseIn, animations: blackAnimation) { 
     completedBlack in // completion block 1 

     UIView.animateWithDuration(0.333333, animations: whiteAnimation) { 
      completedWhite in // completion block 2 
      self.animateBackground(times - 1) 
     } 
    } 
} 

而初始呼叫的樣子:

animateBackground(4) 
+0

不知道爲什麼它擊碎,主題1:SIGABRT信號,我認爲我沒有實現它,我只是複製粘貼功能,並在像你這樣的按鈕操作中調用它,爲什麼它會被破壞? – 2014-11-01 16:02:25

+0

只是注意到我沒有標記你的答案,對不起! – 2015-06-05 00:42:41

+0

@roimulia可能是因爲你在前一個動畫的回調中調用了UIView方法,我對此很陌生,但是......我認爲如果動畫運行在後臺線程上,那可能會導致問題。嘗試將代碼包裝到主隊列中 – DiogoNeves 2015-09-02 11:37:04

相關問題