2017-09-13 64 views
0

我進/出使用動畫視圖gradientView如下:第一次動畫是出問題

func hideOrShowGradientView(hide: Bool) { 
    UIView.animate(withDuration: 0.4, animations: { 
     self.gradientView.isHidden = hide 
    }) 
} 

這種運作良好,但在第一次,沒有動畫。它剛剛出現。在第二次和第三次它奇妙地工作。我試過在主線程上調用動畫塊,但沒有運氣。爲什麼這個動畫第一次也是唯一一次沒有發生?我應該使用另一種動畫方法嗎?

+3

你在哪裏調用它?例如,如果第一個在'viewDidLoad'中,那麼這個過程還爲時過早。 (在回答你的主線程評論時,所有UI更新總是必須在主線程上發生。) – Rob

回答

0

我在init方法中的主線程太多了,只有在第一次顯示視圖時才調用它。移動不必要的初始化到視圖中確實出現

0

您是否試過撥打self.view.layoutIfNeeded()。它強制視圖和子視圖立即完成它的任何未決動畫,這可能會干擾您的動畫。您可以使用它像這樣:

func hideOrShowGradientView(hide: Bool) { 
    self.view.layoutIfNeeded() 
    UIView.animate(withDuration: 0.4, animations: { 
     self.gradientView.isHidden = hide 
     self.view.layoutIfNeeded() 
    }) 
} 

蘋果建議呼籲layoutIfNeeded()兩次,動畫塊,強制重繪上的觀點和它的子視圖前一次,它完成了在視圖中的任何未決的動畫,而無需等待下一個更新週期,並在動畫塊內第二次調用它,以確保動畫更改將立即應用。