如何修复:返回视图控制器时 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
}
我有一个视图在 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
}