我有一个视图控制器,其中一个动画设置为使用options: [.autoreverse, .repeat]
无限期地循环 - 但是,当我提出一个新的视图控制器(设置VC(时,这是完美的选择要用动画返回视图,动画不是动画。视图( ballContainer
(仍然是静态的,当它仍然应该是动画时。
AnimateBallViewin方法
func animateBallViewIn() {
self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, animations: {
self.ballContainer.alpha = 1.0
}) { (true) in
UIView.animate(withDuration: 0.5, delay: 0.0, options: [.autoreverse, .repeat], animations: {
ballViewBottomConstraint = 20.0
self.view.layoutIfNeeded()
}, completion: nil)
}
}
注意 - 我在属性观察者中调用animateBallViewIn()
。
在返回另一个视图控制器之后,我如何保持上述动画?
如果视图消失或最小化/最大化应用程序,动画将停止。这是预期的行为。
要解决此问题,您应该评估viewDidAppear
和applicationDidBecomeActive
中的动画需求,并在必要时调用您的animateBallViewIn
方法。
您可以从视图中删除所有动画,然后使用[.BeginFromCurrentState]选项重新启动动画。
围绕错误的方法:设置一个计时器,其中每个.3(示例时间(您的动画都会熄灭,并完成"自动化"它。请勿在此处包含重复零件,因为每当计时器每次启动操作时,动画都会自动重复。
如果您仍然需要帮助,这可能会帮助您:
Swift Uiview AnimateWithDuration带有重复和自动化
执行重复约束动画时,除了触发viewWillAppear中的动画外,您还必须将约束设置回其在ViewWillDisappear中的起始位置。就我而言,看起来像这样
override func viewWillDisappear(_ animated: Bool) {
self.myConstraint.constant = 0
}
因为我有
self.myConstraint.constant = 20
在我的动画块中。