2015-08-23 64 views
1

我在switch聲明中運行這段動畫,並執行它應該做的事情。定時器內每20秒成功調用一次動畫。但是,動畫不會在第一時間發生。在我的代碼下面,你會看到println陳述,我曾嘗試突出問題。每個println語句都會打印,但不會發生動畫。我錯過了什麼?animateWithDuration動畫曾經但不是兩次

func popAnimation(indexNumber: Int) { 

    let image = self.overlayImageView[indexNumber] 
    image.hidden = false 
    image.alpha = 0.0 

    UIView.animateWithDuration(0.75, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: nil, animations: {() -> Void in 

     println("animation ran") 

     println(image.alpha) 
     image.image = UIImage(named: "lowCountOverlay") 
     image.alpha = 1.0 


     }, completion: { (Bool) -> Void in 

      UIView.animateWithDuration(0.75, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: nil, animations: {() -> Void in 

       println("animation 2 ran") 

       println(image.alpha) 
       image.alpha = 0.0 


       }, completion: { (Bool) -> Void in 

        println("animation 3 ran") 
        image.hidden = true 

      }) 

    }) 

} 

更新:如果我從第二塊完成刪除image.hidden它工作正常,並反覆動畫。這很有趣,因爲如果它沒有隱藏,它應該覆蓋視圖中的其他交互內容,但事實並非如此。其他內容完全可以在模擬器中訪問。 UIImageView image絕對是Storyboard中的頂層。

+0

是不是*用'alpha'的'0'覆蓋了其他交互式內容? – dangnabit

回答

0

嘗試更換:

let image = self.overlayImageView[indexNumber] 
image.hidden = false 
image.alpha = 0.0 

let image = self.overlayImageView[indexNumber] 
image.superview.bringSubviewToFront(image) 
image.hidden = false 
image.alpha = 0.0 
+0

但函數的開頭'image.hidden'被設置爲'false'。 –

+0

沒有骰子。這一個讓我難住。它一次運行完美,但一旦定時器再次觸發它,除了'println'外,什麼也沒有發生。 –

+0

@spacemonkey你可以上傳你的源代碼嗎? –

2

我可能會關閉,但好像你從一個NSTimer可能會或可能不會在主線程中運行。 UI更新需要在主線程中進行,請嘗試將完成處理程序封裝到指向主線程的GCD分發中,如下所示,並查看是否有幫助?也許甚至強迫整個事情的主線。

UIView.animateWithDuration(0.75, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1.0, options: nil, animations: {() -> Void in 
    // First animation 
}, , completion: { (Bool) -> Void in 
    dispatch_async(dispatch_get_main_queue(),{ 
     // second animation 
    }) 
}) 
+1

這聽起來很正確。 – dangnabit

+1

剛剛嘗試過,沒有它似乎不是GCD相關。至少不是那種格式。更新OP。 –

2

我想你需要在其他地方尋找你的錯誤。您似乎沒有在代碼中遺漏任何東西 - 因爲我可以在沒有任何問題的情況下反覆運行動畫。我已將您的代碼複製爲to a separate project,並且動畫每次都有效。