你能在viewDidLoad上运行UIViewPropertyAnimator吗?

时间:2018-03-21 03:36:24

标签: ios swift

我正在尝试运行一个动画,在4秒的持续时间后更改视图的颜色但动画会跳到最终结果而不是动画。

在这里我创建了一个“lightView”,一旦呈现这个ViewController,它就会从红色变为白色。我也在使用SnapKit来设置约束。

schema

在另一个ViewController中,这里是动画ViewController的呈现方式:

override func viewDidLoad() {
    super.viewDidLoad()
    let lightView = UIView()
    lightView.backgroundColor = .red
    lightView.alpha = 0.33

    view.addSubview(lightView)

    lightView.snp.makeConstraints { (make) in
        make.width.equalTo(view)
        make.height.equalTo(view).offset(-70)
        make.centerX.equalTo(view)
        make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
    }

    let dismissButton = UIButton()
    dismissButton.backgroundColor = Global.globalShared.hexStringToUIColor(hex: Global.globalShared.danger)
    dismissButton.setTitle("Dismiss", for: .normal)
    dismissButton.addTarget(self, action: #selector(dismissButton_Pressed), for: .touchUpInside)
    dismissButton.layer.cornerRadius = 5

    view.addSubview(dismissButton)

    dismissButton.snp.makeConstraints { (make) in
        make.width.equalTo(100)
        make.height.equalTo(30)
        make.centerX.equalTo(view)
        make.bottom.equalTo(view)
    }

    let viewColorAnimator: UIViewPropertyAnimator = UIViewPropertyAnimator(
        duration: 4.0,
        curve: .easeInOut)

    viewColorAnimator.addAnimations {
        lightView.backgroundColor = .white
    }

    viewColorAnimator.startAnimation()

}

您是否可以在viewDidLoad中运行动画?如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:0)

在您的视图完成布局过程之前,不能运行任何动画。所以你必须将动画代码放在viewDidAppear中。