我正在尝试运行一个动画,该动画在 4 秒的持续时间后更改 View 的颜色,但动画会跳到最终结果而不是动画。
在这里,我创建了一个“lightView”,一旦呈现此 ViewController,它将从红色到白色缓进缓出。我也使用 SnapKit 来设置约束。
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()
}
在不同的 ViewController 中,动画 ViewController 的呈现方式如下:
@objc func startButton_Pressed(){
//registerLocal()
self.present(NoiseLightViewController(), animated: true, completion: nil)
}
是否允许在 viewDidLoad 中运行动画?如果是这样,我做错了什么?
最佳答案
在 View 完成布局过程之前,无法运行任何动画。所以你必须把动画代码放在viewDidAppear中。
关于ios - 你可以在 viewDidLoad 上运行 UIViewPropertyAnimator 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49397730/