以下是一個淡入淡出的示例,當我使用AVPlayer播放的視頻結束時會調用淡入淡出。
override func viewWillAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.finishedPlaying(_:)), name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
}
var fadeOut:CABasicAnimation!
func finishedPlaying(myNotification:NSNotification) {
self.commsRightNow = commsMode.appleTV.rawValue
fadeOut = CABasicAnimation(keyPath: "opacity")
fadeOut.fromValue = 1.0
fadeOut.toValue = 0.0
fadeOut.duration = 8.0
fadeOut.delegate = self
fadeOut.setValue("video", forKey:"fadeOut")
fadeOut.removedOnCompletion = false
fadeOut.fillMode = kCAFillModeForwards
playerLayer.addAnimation(fadeOut, forKey: nil)
}
當動畫完成時,您還可以調用下面的方法來執行其他操作。這個完全刪除了AVPlayer對象。請注意,由於您可能需要識別多個動畫開始(&停止),所以按鍵fadeOut和視頻是用戶定義的值幷包含在內。
override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
let nameValue = anim.valueForKey("fadeOut") as? String
if let name = nameValue {
if (name == "video") {
playerLayer?.removeFromSuperlayer()
}
}
你也可以調用它在動畫開始時被觸發。
override func animationDidStart(anim: CAAnimation) {
// Blah Blah
}
謝謝。但我不認爲這個答案達到了我想要的。我不想讓圖層淡出;我想要一個動畫本身淡出。我的動畫將變換的比例從1更改爲1.5,反之亦然。我希望這個效果能夠平滑淡化,以便最後的比例爲1(默認)。 –
也許這可能會幫助你,如果你發佈你的代碼? – user3069232