首页 > 解决方案 > CAAnimationGroup 计时

问题描述

这对我来说很奇怪

对于以下代码(其中 myView 是情节提要上的彩色 UIView),时间似乎不对。

class ViewController: UIViewController {

    @IBOutlet weak var myView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let round = CABasicAnimation(keyPath: "cornerRadius")
        round.fromValue = 0.0
        round.toValue = 50.0
        round.duration = 2.0
        round.beginTime = 0.0
        round.fillMode = CAMediaTimingFillMode.backwards
        round.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
        myView.layer.cornerRadius = 50.0
        
        let scaleDown = CABasicAnimation(keyPath: "transform.scale")
        scaleDown.fromValue = 1.0
        scaleDown.toValue = 0.25
        scaleDown.beginTime = 2.0
        scaleDown.duration = 2.0
        
        
        let rotate = CABasicAnimation(keyPath: "transform.rotation")
        rotate.fromValue = .pi/10.0
        rotate.toValue = 0.0
        rotate.beginTime = 4.0
        rotate.duration = 2.0

        let hideAnimation = CABasicAnimation(keyPath: "hidden")
        hideAnimation.fromValue = NSNumber(value: 1)
        hideAnimation.toValue = NSNumber(value: 0)
        hideAnimation.beginTime = 4.0
        hideAnimation.duration = 2.0

        let imageGroupAnimations = CAAnimationGroup()
        imageGroupAnimations.animations = [round, scaleDown, rotate, hideAnimation]
        imageGroupAnimations.duration = 6.0
        imageGroupAnimations.repeatCount = 1
        imageGroupAnimations.beginTime = 0.0
        myView.layer.add(imageGroupAnimations, forKey: nil)
        
    }
}

动画组的持续时间是 6.0,所以我希望形状被隐藏(因为我希望它在 4 到 4 + 2 (6.0) 秒之间隐藏。

但是,形状出现并结束动画(完成旋转)。我已经尝试在每个 beginTime 之前使用 CACurrentMediaTime() - 但这也没有预期的结果。

预期结果:

如何使形状在 4 - 6 秒后消失?

标签: swift

解决方案


如果要在视图上显示淡出效果,请使用

let hideAnimation = CABasicAnimation(keyPath: "opacity")

代替

let hideAnimation = CABasicAnimation(keyPath: "hidden") //bad!

如果您不希望动画在完成后重置您的值,只需添加

imageGroupAnimations.fillMode = .forwards
imageGroupAnimations.isRemovedOnCompletion = false

给你的CAAnimationGroup


推荐阅读