UIView.animateKeyframes 跳转到下一个动画的开始而不是平滑过渡

Posted

技术标签:

【中文标题】UIView.animateKeyframes 跳转到下一个动画的开始而不是平滑过渡【英文标题】:UIView.animateKeyframes jumps to start of next animation instead of transitioning smoothly 【发布时间】:2017-07-03 16:19:35 【问题描述】:

我正在尝试创建一个动画,其中一个对象平滑地从一个关键点移动到下一个关键点。到目前为止,对象确实会移动到不同的关键点,但不是在完成一个动画后立即过渡到每个关键点,而是自动跳转到下一个关键点,但中间没有过渡动画。这是我正在使用的功能:

  func keyframeAnimate () 

    UIView.animateKeyframes(withDuration: 3, delay: 0, options: [], animations: 

      UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1.0, animations: 
        let translation = CGAffineTransform(translationX: 150, y: 150)
        self.square.alpha = 0.5
        self.square.transform = translation.rotated(by: CGFloat.pi).scaledBy(x: 2, y: 2)
      )

      UIView.addKeyframe(withRelativeStartTime: 1.01, relativeDuration: 1.0, animations: 
        let translation = CGAffineTransform(translationX: 100, y: 400)
        self.square.alpha = 1
        self.square.transform = translation.rotated(by: -CGFloat.pi).scaledBy(x: 1, y: 1)
      )
    )
  

感谢任何帮助!

【问题讨论】:

已经有一段时间没有使用这些关键帧动画了。您是否尝试过在animateKeyFrames 方法中设置不同的选项? UIViewKeyframeAnimationOptionCalculationModeLinear 看起来可能会有所帮助。如果您的相对开始时间为 1.01,那么在下一个动画的开始和停止之间会有 0.01 秒的持续时间。 Idk 如果那是有害的,但我可能会将其更改为 1.0 以查看效果。 哦,好的。更改相对开始时间有效。谢谢! 是的,我只是在操场上运行您的代码,它对我有用。不确定开始时间有什么意义,但很高兴你能成功。 【参考方案1】:

您的问题在于相对开始和相对持续时间。正如文档所解释的,这些参数应该是 0 到 1 之间的值,因为它们是整个 animateKeyframes(withDuration: duration

的一部分

【讨论】:

以上是关于UIView.animateKeyframes 跳转到下一个动画的开始而不是平滑过渡的主要内容,如果未能解决你的问题,请参考以下文章

UIView.animateKeyframes 跳转到下一个动画的开始而不是平滑过渡

UIView animateKeyframes 不起作用

如何根据后者的进度为已经运行的动画添加动画?

跳台阶,变态跳台阶,矩阵覆盖

青蛙变态跳台阶解法

剑指Offer跳台阶&变态跳台阶