我正在尝试运行一个动画,在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中运行动画?如果是这样,我做错了什么?
答案 0 :(得分:0)
在您的视图完成布局过程之前,不能运行任何动画。所以你必须将动画代码放在viewDidAppear中。