UIView 过渡动画不执行
UIView transition animation not executing
我正在尝试在 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})
}
尝试在动画块中的 coreView
隐藏代码之后添加 self.view.layoutIfNeeded()
。
而不是操纵 coreView 的 isHidden 属性 使用 alpha 属性.
尝试用 coreView.alpha = 0 替换 coreView.isHidden = true 并在动画块中替换 coreView.isHidden = false 和 coreView.alpha = 1
我猜应该是这样。它应该动画。谢谢。
这不起作用,因为在 viewWillAppear 方法完成之前没有正确设置 coreView,因此您不能使用过渡动画(您可以为其他属性设置动画,例如 alpha)。
你能做的是:
DispatchQueue.main.async {
coreView.isHidden = false
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
}, completion: {_ in})
}
这会将转换分派回主队列,并在 viewWillAppear 方法完成并且正确设置 coreView 后触发。
顺便记住,只要视图控制器进入视图,就会调用 viewWillAppear,因此如果它隐藏并且 returns 您将添加另一个 coreView。
将您的转换代码移至 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})
}
我正在尝试在 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})
}
尝试在动画块中的 coreView
隐藏代码之后添加 self.view.layoutIfNeeded()
。
而不是操纵 coreView 的 isHidden 属性 使用 alpha 属性.
尝试用 coreView.alpha = 0 替换 coreView.isHidden = true 并在动画块中替换 coreView.isHidden = false 和 coreView.alpha = 1
我猜应该是这样。它应该动画。谢谢。
这不起作用,因为在 viewWillAppear 方法完成之前没有正确设置 coreView,因此您不能使用过渡动画(您可以为其他属性设置动画,例如 alpha)。
你能做的是:
DispatchQueue.main.async {
coreView.isHidden = false
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
}, completion: {_ in})
}
这会将转换分派回主队列,并在 viewWillAppear 方法完成并且正确设置 coreView 后触发。
顺便记住,只要视图控制器进入视图,就会调用 viewWillAppear,因此如果它隐藏并且 returns 您将添加另一个 coreView。
将您的转换代码移至 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})
}