显示新的视图控制器时,带有重复选项的UIView.animate会停止

时间:2017-04-21 17:05:19

标签: ios swift animation uiview uiviewanimation

我有一个带有一个动画的视图控制器,它被设置为与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()

如何从呈现另一个视图控制器返回动画后保持上述动画动画?

4 个答案:

答案 0 :(得分:1)

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

要解决此问题,您应该在viewDidAppearapplicationDidBecomeActive评估动画需求,并在必要时调用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

在我的动画块中。