Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在收到UIKeyboardShowNotification后我更改了其帧的UIView会自动设置动画?_Ios_Animation_Keyboard_Uiviewanimation - Fatal编程技术网

Ios 为什么在收到UIKeyboardShowNotification后我更改了其帧的UIView会自动设置动画?

Ios 为什么在收到UIKeyboardShowNotification后我更改了其帧的UIView会自动设置动画?,ios,animation,keyboard,uiviewanimation,Ios,Animation,Keyboard,Uiviewanimation,我注意到一个令人惊讶的行为:当我在收到UIKeyboardWillShowNotification或UIKeyboardWillHideNotification后更改UIView的帧时,帧的更改是动画化的。这个动画似乎使用了与键盘相同的持续时间和缓和曲线。在这个项目中,我不使用自动布局,而是通过设置视图的框架以编程方式布局视图 有人能给我解释一下这里发生了什么事吗 代码 UIViewController的viewDidLoad()的有趣部分: 回调: func keyboardWillShow(

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

有人能给我解释一下这里发生了什么事吗

代码 UIViewController的
viewDidLoad()
的有趣部分:

回调:

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)    
}
进一步详情
  • 回调只调用一次
  • 我使用的是标准的UIViewController
  • 我没有收到来自
    UIKeyboardDid…
    通知的回调动画
  • 我可以通过调用
    UIView.commitAnimations()
    在设置我的UIViews框架之前,但是 看起来有点黑
  • 不应该涉及自动布局,因为我正在通过设置视图的框架来布局视图
进一步问题
  • 这是预期的行为吗
  • 它在什么地方有记录吗
  • 有没有一个好方法可以禁用这些动画
  • 依靠这种行为是否省钱
  • 当收到
    UIKeyboardWill…
    通知时,我是否可以安全地播放自定义动画
    • 答案如下:

      • 是的,因为这些通知中的代码专门用于设置视图动画以响应键盘外观,例如滚动视图或将文本字段移动到正确的位置
      • 除了可用的键盘通知文档外,我什么也找不到
      • -相关问题
      • 要禁用这些动画,请调用
        didShow
        didHide
        通知,因为它们包含动画提交后要执行的代码
      • 只要你能很好地使用键盘动画,是的!但是这些通知是用来处理视图中的键盘动画交互,而不是其他无关的动画。您应该在滚动视图中创建那些不相关的动画视图,并在收到键盘通知时相应地滚动,以获得更好的体验

      希望我能帮上忙。

      这肯定会帮上忙,谢谢。作为后续,你认为这个总结是正确的吗?在发送
      ui键盘将…
      通知之前调用。当我在其中一个通知的回调中更改视图的帧时,这发生在开始/提交动画块内部。因此,这些更改是动态的。最终被称为。
      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)    
      }