您不能動畫多個狀態更改到單個UIView.animateWithDuration
調用中的同一個屬性。它只會動畫到最後一次狀態變化(就像你的情況一樣)。相反,您可以使用completionBlock
將它們鏈接在一起。
UIView.animateWithDuration(5/3.0, animations: {
self.view.backgroundColor = UIColor.yellowColor()
}, completion:{ finished1 in
UIView.animateWithDuration(5/3.0, animations: {
self.view.backgroundColor = UIColor.blueColor()
}, completion:{finished2 in
UIView.animateWithDuration(5/3.0, animations: {
self.view.backgroundColor = UIColor.purpleColor()
}, completion:{finished3 in
println("COLOR CHANGED")
})
})
})
或者您可以使用關鍵幀動畫,指定如下所示的中間幀。 relativeDuration
應該是0到1之間的一個值,表示一個關鍵幀的相對持續時間。例如,如果整個動畫是3 seconds
且relativeDuration是(1/3)
,則該關鍵幀將爲3/3 = 1
秒生成動畫。
relativeStartTime
類似地是關鍵幀相對於整個動畫的持續時間開始的相對時間。例如,如果整個動畫3 seconds
和relativeStartTime是(1/3)
,那麼關鍵幀將開始後1 second
var duration = 5.0;
var relativeDuration = 1.0/3;
UIView.animateKeyframesWithDuration(duration, delay: 0, options: nil, animations: {
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: relativeDuration, animations: {
self.view.backgroundColor = UIColor.yellowColor()
})
UIView.addKeyframeWithRelativeStartTime(relativeDuration, relativeDuration: relativeDuration, animations: {
self.view.backgroundColor = UIColor.blueColor()
})
UIView.addKeyframeWithRelativeStartTime(2 * relativeDuration, relativeDuration: relativeDuration, animations: {
self.view.backgroundColor = UIColor.purpleColor()
})
}, completion:nil);
順便說一句,這個代碼是錯誤的:'(布爾)in'。它不會拋出錯誤,但它不會做你認爲它的作用。只要寫'_in'。 – matt
並停止使用大寫字母作爲函數名稱和變量名稱!大寫字母用於類名。 – matt