每次 View Controller 出现时动画视图?
Animating View every time the View Controller appears?
我有一个 UIViewController
,每次单击 UITabBarButtonItem
时都会触发它。问题是它有点像菜单,由从屏幕底部向上滑动的 UIView
组成。
现在,底部约束最初设置为 -500,因此它不在屏幕上。我创建了一个函数,通过一些动画将约束设置回 100。问题是我认为如果我调用 viewWillAppear()
中的函数,它每次都会被动画化。但事实并非如此。我还尝试在 viewDidDisappear()
中将约束重置回 -500,以便在下次触发之前它不在屏幕上。
无效。它只是第一次工作。我错过了什么或者我在错误的地方调用它...
class PostVC: UIViewController {
@IBOutlet weak var menuBottomConstraint: NSLayoutConstraint!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
animateMenu()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
menuBottomConstraint.constant = -500
}
func animateMenu() {
menuBottomConstraint.constant = 100
UIView.animate(
withDuration: 1.0,
delay: 0.0,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 0.0, options: .curveEaseOut,
animations: {
self.view.layoutIfNeeded()
},
completion: nil
)
}
}
每次当您更改 Constraint
的 constant
值并且您会看到效果时,您必须调用 layoutIfNeeded()
方法。
在您的代码中:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
menuBottomConstraint.constant = -500
self.view.layoutIfNeeded()
}
我还建议用 viewDidAppear
替换 viewWillAppear
函数
我有一个 UIViewController
,每次单击 UITabBarButtonItem
时都会触发它。问题是它有点像菜单,由从屏幕底部向上滑动的 UIView
组成。
现在,底部约束最初设置为 -500,因此它不在屏幕上。我创建了一个函数,通过一些动画将约束设置回 100。问题是我认为如果我调用 viewWillAppear()
中的函数,它每次都会被动画化。但事实并非如此。我还尝试在 viewDidDisappear()
中将约束重置回 -500,以便在下次触发之前它不在屏幕上。
无效。它只是第一次工作。我错过了什么或者我在错误的地方调用它...
class PostVC: UIViewController {
@IBOutlet weak var menuBottomConstraint: NSLayoutConstraint!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
animateMenu()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
menuBottomConstraint.constant = -500
}
func animateMenu() {
menuBottomConstraint.constant = 100
UIView.animate(
withDuration: 1.0,
delay: 0.0,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 0.0, options: .curveEaseOut,
animations: {
self.view.layoutIfNeeded()
},
completion: nil
)
}
}
每次当您更改 Constraint
的 constant
值并且您会看到效果时,您必须调用 layoutIfNeeded()
方法。
在您的代码中:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
menuBottomConstraint.constant = -500
self.view.layoutIfNeeded()
}
我还建议用 viewDidAppear
viewWillAppear
函数