uiview.animate带有重复选项停止时,当提出新的视图控制器时



我有一个视图控制器,其中一个动画设置为使用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()

在返回另一个视图控制器之后,我如何保持上述动画?

如果视图消失或最小化/最大化应用程序,动画将停止。这是预期的行为。

要解决此问题,您应该评估viewDidAppearapplicationDidBecomeActive中的动画需求,并在必要时调用您的animateBallViewIn方法。

您可以从视图中删除所有动画,然后使用[.BeginFromCurrentState]选项重新启动动画。

围绕错误的方法:设置一个计时器,其中每个.3(示例时间(您的动画都会熄灭,并完成"自动化"它。请勿在此处包含重复零件,因为每当计时器每次启动操作时,动画都会自动重复。

如果您仍然需要帮助,这可能会帮助您:

Swift Uiview AnimateWithDuration带有重复和自动化

执行重复约束动画时,除了触发viewWillAppear中的动画外,您还必须将约束设置回其在ViewWillDisappear中的起始位置。就我而言,看起来像这样

override func viewWillDisappear(_ animated: Bool) {
    self.myConstraint.constant = 0
}

因为我有

self.myConstraint.constant = 20

在我的动画块中。

最新更新