我正在尝试在屏幕上显示UIView时使用动画转换。UIView显示正确,但动画出现时不会出现。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let coreView = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
coreView.backgroundColor = UIColor.cyan
coreView.layer.borderColor = UIColor.darkGray.cgColor
coreView.layer.borderWidth = 8
coreView.layer.cornerRadius = 15
coreView.isHidden = true
self.view.addSubview(coreView)
//The transition occurs here
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
coreView.isHidden = false
}, completion: {_ in})
}
最佳答案
这不起作用,因为在viewWillAppear方法完成之前,coreView没有正确设置,因此您不能使用转换动画(您可以设置其他属性的动画,如alpha)。
你能做的就是:
DispatchQueue.main.async {
coreView.isHidden = false
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
}, completion: {_ in})
}
这会将转换分派回主队列,并在viewWillAppear方法完成且coreView设置正确后触发。
顺便说一下,请记住每当视图控制器进入视图时都会调用viewWillAppear,因此如果它隐藏并返回,您将添加另一个coreView。