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

问题描述 投票:1回答:1

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

}
ios swift uiimageview uiviewanimation
1个回答
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))
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.