首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >淡出CABasicAnimation

淡出CABasicAnimation
EN

Stack Overflow用户
提问于 2016-04-08 07:16:45
回答 1查看 2K关注 0票数 1

我使用的CABasicAnimation可以重复地向上和向下缩放CALayer。这意味着动画是自动反转的,重复无限次,它的关键路径是transform.scale

我想要做的是在某个点上“淡出”动画。因此,我不想立即停止它(使用layer.removeAnimationForKey:),但我希望在一秒钟的时间跨度内平滑地删除动画。我曾尝试将layer.removeAnimationForKey:包装在CATransaction块中并设置其animationDuration,但也不起作用。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-04-08 15:13:58

这是一个淡出的例子,当我用AVPlayer播放的视频结束时,就会调用淡出。

代码语言:javascript
复制
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是用户定义的值,并且包含在内,因为您可能需要识别多个开始(和停止)的动画。

代码语言:javascript
复制
override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
    let nameValue = anim.valueForKey("fadeOut") as? String
    if let name = nameValue {
        if (name == "video") {
            playerLayer?.removeFromSuperlayer()


        }
    }

您也可以调用此函数以在动画开始时触发。

代码语言:javascript
复制
override func animationDidStart(anim: CAAnimation) {
    // Blah Blah
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36488844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档