为什么我在收到 UIKeyboardWillShowNotification 后更改其框架的 UIView 会自动设置动画?

Why is a UIView whose frame I change after receiving a UIKeyboardWillShowNotification automatically animated?

我注意到一个令人惊讶的行为:当我在收到 UIKeyboardWillShowNotificationUIKeyboardWillHideNotification 后更改 UIView 的框架时,框架的更改是 动画。看起来这个动画使用了与键盘相同的持续时间和缓动曲线。在这个项目中,我不使用 Autolayout,我通过设置框架以编程方式布置视图。

谁能给我解释一下这是怎么回事?

代码

UIViewController 的有趣部分 viewDidLoad():

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillShow), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillDisappear), name: UIKeyboardWillHideNotification, object: nil)

someView.frame = CGRect(origin: CGPoint(x: 0, y: view.bounds.height - 10), size: CGSize(width: 10, height: 10))
someView.backgroundColor = UIColor.redColor()
view.addSubview(someView)

回调:

func keyboardWillShow(notification: NSNotification) {
    someView.frame.origin = CGPoint(x: 0, y: 0)
}

func keyboardWillDisappear(notification: NSNotification) {
    someView.frame.origin = CGPoint(x: 0, y: view.bounds.size.height - someView.bounds.size.height)    
}

更多详情

更多问题

答案:

  • 是的,因为这些通知中的代码专门用于为您的视图设置动画以响应键盘的外观,例如滚动滚动视图或将文本字段移动到正确的位置。
  • 除了可用的键盘通知文档,我找不到任何东西here
  • Synchronizing Animations in keyboardWillShow keyboardWillHide -- Hardware Keyboard & Virtual Keyboard Simultaneously - 相关问题
  • 要禁用这些动画,请调用 didShowdidHide 通知,因为它们包含在动画提交后要执行的代码。
  • 是的。
  • 只要你键盘动画用得好,就可以!但这些通知旨在用于处理视图内的键盘动画交互,而不是其他不相关的动画。您应该将您尝试在滚动视图中设置动画的那些不相关的动画视图,并在收到键盘通知时相应地滚动它,以获得更好的体验。

希望我帮到了你。