在视图控制器之间切换时,图像旋转动画会加速吗

时间:2018-02-28 15:48:01

标签: ios swift uiimageview uiviewanimation

我有一个应用程序,其中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)

}

1 个答案:

答案 0 :(得分:3)

每次开始制作动画之前,都需要重置变换。否则它可能已经在旋转结束的一半。因此,花费更短的时间或更远的时间=更长的时间。也可以使用.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))
    })
}