我有一个viewController
,其中包含一个view
,其中包含四个UITextFields
。我想做的就是在ViewController加载后立即对视图进行动画处理。
动画在加载控制器时按照我想要的方式工作,但是由于某些原因,每次我点击任何viewDidLayoutSubviews
时都会调用UITextFields
,因此它会不断为视图添加动画。
这是正常现象吗,是否每次敲击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
})
}
}
答案 0 :(得分:3)
window.location.host
会在 Auto Layout 认为有工作要做的任何时候被调用,这可能会在您意料之外的时间发生。这使得执行一次只发生一次的动作是一个糟糕的选择。
将动画移动到viewDidLayoutSubviews()
的替代值。这是您第一次知道能够看到视图,因此是执行动画的合适位置。
viewDidAppear()