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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在视图控制器之间切换时,图像旋转动画会加速吗相关的知识,希望对你有一定的参考价值。

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

以上是关于在视图控制器之间切换时,图像旋转动画会加速吗的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间切换时自动旋转

在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然

加速 iPhone 动画

自动旋转和 UIImageView 动画的问题

平滑地加速正在运行的旋转动画

更改设备方向时如何为uiimageview设置动画