我试图在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})
}
答案 0 :(得分:1)
而不是操纵coreView的 isHidden 属性,而是使用 alpha 属性。
尝试将 coreView.isHidden = true 替换为 coreView.alpha = 0 ,并在动画块中将 coreView.isHidden = false 替换为< strong> coreView.alpha = 1
我猜应该是这样。它应该动画。感谢。
答案 1 :(得分:0)
尝试在动画块中隐藏self.view.layoutIfNeeded()
隐藏代码后添加coreView
。
答案 2 :(得分:0)
这不起作用,因为在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。
答案 3 :(得分:0)
将转换代码移至viewDidAppear
override func viewDidAppear(_ animated: Bool) {
//The transition occurs here
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
coreView.isHidden = false
}, completion: {_ in})
}