我使用的CABasicAnimation可以重复地向上和向下缩放CALayer。这意味着动画是自动反转的,重复无限次,它的关键路径是transform.scale。
我想要做的是在某个点上“淡出”动画。因此,我不想立即停止它(使用layer.removeAnimationForKey:),但我希望在一秒钟的时间跨度内平滑地删除动画。我曾尝试将layer.removeAnimationForKey:包装在CATransaction块中并设置其animationDuration,但也不起作用。
任何帮助都是非常感谢的。
发布于 2016-04-08 15:13:58
这是一个淡出的例子,当我用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和video是用户定义的值,并且包含在内,因为您可能需要识别多个开始(和停止)的动画。
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
}https://stackoverflow.com/questions/36488844
复制相似问题