如何修复:返回视图控制器时 UIView 动画不重新启动

How to fix: UIView animations not restarting when returning to view controller

我有一个视图在 ViewController 首次打开时开始动画。它在初始启动时工作正常,但在离开动画后返回视图时不会重新启动。视图嵌入在导航控制器中

我尝试将动画放置在多个位置,包括 viewWillAppear、viewDidAppear 和 viewWillLayoutSubviews

我在 viewDidAppear 中放置了一个断点,它确实逐步执行了代码,但动画没有重新开始。

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        UIView.animate(withDuration: 20.0, delay: 0, options: [.autoreverse, .repeat, .curveLinear], animations: {
            self.scrollingView.transform = CGAffineTransform(translationX: -350, y: 0)
        }, completion: nil)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(true)
        scrollingView.layer.removeAllAnimations()
    }

你需要在segue期间return将scrollingView恢复到原来的位置,因为UINavigationController第一个UIViewController没有出去范围,也就是它不会再次实例化。因此当你回到第一个UIViewController时,scrollingView仍然是运行之前的动画。

您需要使用以下代码重新启动 CGAffineTransform :

override func viewDidDisappear(_ animated: Bool) {
     self.textView.transform = CGAffineTransform.identity
}