我有一个viewController
,里面有一个view
,里面有四个UITextFields
。我正在尝试做的是在加载视图控制器后立即对视图进行动画处理。
加载控制器时,动画按照我想要的方式工作,但由于某种原因,每次我点击任何UITextFields
时都会调用viewDidLayoutSubviews
因此它会一直为视图设置动画。
这是正常行为吗,每次点击TextField时都应该调用viewDidLayoutSubviews吗?
这是我的代码:
class MyViewController: UIViewController{
@IBOutlet weak var viewAlertContainer: UIView!
override func viewDidLayoutSubviews() {
showAlertViewWithAnimation()
}
func showAlertViewWithAnimation(){
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 2, options: .curveEaseIn, animations: {
self.viewAlertContainer.frame.origin.y = 150
})
}
}
每当 Auto Layout 认为它有工作要做时,就会调用viewDidLayoutSubviews()
,这可能会在您意想不到的时候发生。 这使得执行一次发生的操作是一个糟糕的选择。
将动画移动到 viewDidAppear()
的覆盖。 这是您第一次知道视图能够被看到,因此是执行动画的合适位置。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
showAlertViewWithAnimation()
}