我有一个带有一个动画的视图控制器,它被设置为与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()
。
如何从呈现另一个视图控制器返回动画后保持上述动画动画?
答案 0 :(得分:1)
如果视图消失或应用最小化/最大化,动画将停止。这是预期的行为。
要解决此问题,您应该在viewDidAppear
和applicationDidBecomeActive
评估动画需求,并在必要时调用animateBallViewIn
方法。
答案 1 :(得分:0)
您可以从视图中删除所有动画,然后使用[.beginFromCurrentState]选项重新启动动画。
答案 2 :(得分:0)
解决错误的方法: 设置一个计时器,其中每个.3(示例时间)你的动画将关闭,并完成“自动反转”它。不要在此处包含重复部分,因为每当计时器每隔0.3秒启动一次动作时动画将自动重复。
如果您仍然需要帮助,这可能会帮助您:
swift UIView animateWithDuration with repeat and autoreverse
答案 3 :(得分:0)
在执行重复约束动画时,除了在viewWillAppear中触发动画外,还必须将约束设置回viewWillDisappear中的起始位置。就我而言,它是这样的
override func viewWillDisappear(_ animated: Bool) {
self.myConstraint.constant = 0
}
因为我有
self.myConstraint.constant = 20
在我的动画块中。