动画停止时如何使动画速度变慢

Posted

技术标签:

【中文标题】动画停止时如何使动画速度变慢【英文标题】:how to animation speed slow when animation stop 【发布时间】:2018-05-08 05:48:33 【问题描述】:

我的代码如下。动画停止后如何减速?

extension UIView
    func rotate() 
        let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
        rotation.fromValue = 0.0
        rotation.toValue = 25
        rotation.duration = 1.5
        rotation.isCumulative = true
        rotation.repeatCount = 1
        self.layer.add(rotation, forKey: "rotationAnimation")
    

【问题讨论】:

对慢动画使用完成块 你可以继续降低 layer.speed。 【参考方案1】:

请找到以下详细信息并在您的代码中添加以下行,

rotation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)

EaseInOut 缓入缓出曲线导致动画开始 慢慢地,在持续时间的中间加速,然后慢慢地 在完成之前再次。这是大多数人的默认曲线 动画。

EaseIn 缓入曲线使动画开始缓慢,然后 随着进度的加快。

EaseOut 缓出曲线使动画快速开始,并且 然后在完成时放慢速度。

希望这对您有所帮助,如有任何疑问,请告诉我。

【讨论】:

【参考方案2】:

你可以使用self.layer.speed平滑地降低动画速度

你可以这样做

注意:这里你需要做一些修改它没有在xcode中测试

  let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true)  (timer) in
        self.layer.timeOffset = self.layer.convertTime(CACurrentMediaTime(), from: nil)
        if self.layer.speed == 0  timer.invalidate() 
        self.layer.beginTime = CACurrentMediaTime()
        self.layer.speed -= 0.5

    
    timer.fire()

希望对你有帮助

【讨论】:

以上是关于动画停止时如何使动画速度变慢的主要内容,如果未能解决你的问题,请参考以下文章

js鼠标悬浮动画:由一个位置移动到另外一个位置,速度由快变慢[修正版2]

如何使 UIBezierPath 中的两条线以不同的速度进行动画处理

如何在动画 CABasicAnimation 时改变速度

JS动画之速度动画和透明度变化

如何在动画CABasicAnimation时改变速度

缓动动画