我有一个应用程序,其中有一个UIImageView
顺时针旋转使用UIView.animate
像这样:
func startAnimation(targetView: UIView, duration: Double = 6)
{
UIView.animate(withDuration: duration, delay: 0.0, options: .curveLinear, animations: {
targetView.transform = targetView.transform.rotated(by: CGFloat(Double.pi))
})
{ finished in
self.startAnimation(targetView: targetView, duration: duration)
}
}
此函数仅在viewDidApear()
中调用(主要原因是因为我还有2个UIViewControllers
,用户可以来回移动。
我也有一个stopAnimation()
函数,在viewWillDisappear()
中调用。主要目标是在向用户呈现另一个视图控制器时停止动画。
func stopAnimation()
{
self.view.layer.removeAllAnimations()
self.view.layoutIfNeeded()
}
目标:当用户停留在同一个视图控制器上时,动画应该是无限的,但是当他们切换到另一个时,动画应该停止,当它们返回到该视图控制器时,动画应该以相同的恒定速度再次开始。
问题:出于某种原因,每次在另一个视图控制器和具有该动画的视图控制器之间切换时,动画都会加速。我不确定是什么造成的。
编辑:要求的附加代码:
override func viewDidAppear(_ animated: Bool)
{
super.viewDidAppear(animated)
startAnimation(targetView: logo)
}
每次开始制作动画之前,都需要重置变换。否则它可能已经在旋转结束的一半。因此,花费更短的时间或更远的时间=更长的时间。也可以使用.repeat而不是递归。
func startAnimation(targetView: UIView, duration: Double = 6)
{
targetView.transform = targetView.transform.rotated(by: CGFloat(0.0))
UIView.animate(withDuration: duration, delay: 0.0, options: [.curveLinear, .repeat], animations: {
targetView.transform = targetView.transform.rotated(by: CGFloat(Double.pi))
})
}