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 跳转到下一个动画的开始而不是平滑过渡的主要内容,如果未能解决你的问题,请参考以下文章