Iphone 淡出卡巴斯基化
我正在使用一个Iphone 淡出卡巴斯基化,iphone,swift,calayer,cabasicanimation,Iphone,Swift,Calayer,Cabasicanimation,我正在使用一个cabasicanition,它反复地上下缩放CALayer。这意味着动画是自动反转的,重复无限次,其关键路径是transform.scale 我想做的是在某一点“淡出”动画。因此,我不想立即停止它(使用layer.removeAnimationForKey:),但我希望动画能够在一秒钟的时间内顺利删除。我已尝试在CATTransaction块中包装层。移除动画forkey:,并设置其动画持续时间,但这也不起作用 非常感谢您的帮助。这里有一个淡出的示例,在我用AVPlayer播放的
cabasicanition
,它反复地上下缩放CALayer
。这意味着动画是自动反转的,重复无限次,其关键路径是transform.scale
我想做的是在某一点“淡出”动画。因此,我不想立即停止它(使用layer.removeAnimationForKey:
),但我希望动画能够在一秒钟的时间内顺利删除。我已尝试在CATTransaction
块中包装层。移除动画forkey:
,并设置其动画持续时间
,但这也不起作用
非常感谢您的帮助。这里有一个淡出的示例,在我用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对象。注意:淡出键和视频键是用户定义的值,因为您可能需要识别多个动画的开始和停止
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
}
这里有一个淡出的例子,当我用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对象。注意:淡出键和视频键是用户定义的值,因为您可能需要识别多个动画的开始和停止
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(默认值)。谢谢。但我不认为这个答案达到了我想要的。我不希望一层被淡出;我希望动画本身被淡出。我的动画将变换的比例从1重复更改为1.5,反之亦然。我希望此效果平滑淡出,以便在结尾处比例为1(默认值)。