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

慢跑

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

有人可以告诉我这是怎么回事吗?

代码

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)    
}

更多详细信息

  • 回调仅被调用一次。
  • 我正在使用标准的UIViewController。
  • 我没有从UIKeyboardDid...通知的回调中获得动画
  • 我可以通过UIView.commitAnimations()在设置UIViews Frame之前调用来防止自动动画播放,但这似乎很麻烦。
  • 自动布局不应该涉及,因为我通过设置框架来布局视图

进一步的问题

  • 这是预期的行为吗?
  • 是否记录在某处?
  • 是否有禁用此类动画的好方法?
  • 依靠这种行为是否省钱?
  • 收到UIKeyboardWill...通知后,我可以安全地播放自定义动画吗?
罗杰·欧巴(Roger Oba)

答案:

  • 是的,因为这些通知中的代码仅用于使视图具有动画效果,以响应键盘的外观,例如滚动视图或将文本字段移至正确的位置。
  • 除了这里的键盘通知文档外,我什么也找不到
  • 同步keyboardWillShow keyboardWillHide中的动画-硬件键盘和虚拟键盘同时出现-相关问题
  • 要禁用这些动画,请调用didShowdidHide通知,因为它们应包含要在提交动画后执行的代码。
  • 是的。
  • 只要您能够很好地使用键盘动画,就可以!但是这些通知仅用于处理视图内的键盘动画交互,而不是其他无关的动画。您应该尝试在滚动视图中创建动画的那些不相关的动画视图,并在接收键盘通知时相应地对其进行滚动,以获取更好的体验。

希望我能帮上忙。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么动画后浮动动作按钮消失了?

来自分类Dev

为什么接收到PubNub消息时我的基因剔除模块会失去其绑定?

来自分类Dev

为什么动画结束后元素的宽度会改变?

来自分类Dev

为什么 IE 11 会自动更改变量的值?

来自分类Dev

为什么图层变换会影响UIView的框架?

来自分类Dev

为什么我的自动化测试用例浏览器会自动关闭?

来自分类Dev

为什么我的类变量在方法之间改变其值?

来自分类Dev

为什么我的功能会自动执行?

来自分类Dev

为什么我的功能会自动执行?

来自分类Dev

在python中,我的数组值会自己改变,为什么?

来自分类Dev

为什么在发布方法后,我的整数对象会自动转换为字符串?

来自分类Dev

为什么实体框架会自动加载相关实体

来自分类Dev

为什么实体框架会自动加载相关实体

来自分类Dev

为什么我的左右移动动画不起作用?

来自分类Dev

为什么我的eslint自动化会返回此错误?

来自分类Dev

为什么我会从WinLess收到此错误消息?

来自分类Dev

为什么我会从WinLess收到此错误消息?

来自分类Dev

为什么我的UIView会动画到错误的位置?

来自分类Dev

为什么我的变量会重置其值?

来自分类Dev

为什么在android中单击我的应用程序的后退按钮后,我以前的活动会自动刷新?

来自分类Dev

为什么图像过渡会影响我的动画?

来自分类Dev

为什么弹性框项目图像会根据其初始大小而改变大小?

来自分类Dev

iOS UIView跳动动画

来自分类Dev

UIView滑动动画毛刺

来自分类Dev

iOS UIView跳动动画

来自分类Dev

为什么此滚动动画不起作用?

来自分类Dev

对于UIView子类,如果用CGRect参数覆盖初始化器,为什么会自动提供带有空参数的初始化器?

来自分类Dev

为什么我收到“未初始化的变量”错误

来自分类Dev

为什么动画结束后我的元素不再隐藏?

Related 相关文章

  1. 1

    为什么动画后浮动动作按钮消失了?

  2. 2

    为什么接收到PubNub消息时我的基因剔除模块会失去其绑定?

  3. 3

    为什么动画结束后元素的宽度会改变?

  4. 4

    为什么 IE 11 会自动更改变量的值?

  5. 5

    为什么图层变换会影响UIView的框架?

  6. 6

    为什么我的自动化测试用例浏览器会自动关闭?

  7. 7

    为什么我的类变量在方法之间改变其值?

  8. 8

    为什么我的功能会自动执行?

  9. 9

    为什么我的功能会自动执行?

  10. 10

    在python中,我的数组值会自己改变,为什么?

  11. 11

    为什么在发布方法后,我的整数对象会自动转换为字符串?

  12. 12

    为什么实体框架会自动加载相关实体

  13. 13

    为什么实体框架会自动加载相关实体

  14. 14

    为什么我的左右移动动画不起作用?

  15. 15

    为什么我的eslint自动化会返回此错误?

  16. 16

    为什么我会从WinLess收到此错误消息?

  17. 17

    为什么我会从WinLess收到此错误消息?

  18. 18

    为什么我的UIView会动画到错误的位置?

  19. 19

    为什么我的变量会重置其值?

  20. 20

    为什么在android中单击我的应用程序的后退按钮后,我以前的活动会自动刷新?

  21. 21

    为什么图像过渡会影响我的动画?

  22. 22

    为什么弹性框项目图像会根据其初始大小而改变大小?

  23. 23

    iOS UIView跳动动画

  24. 24

    UIView滑动动画毛刺

  25. 25

    iOS UIView跳动动画

  26. 26

    为什么此滚动动画不起作用?

  27. 27

    对于UIView子类,如果用CGRect参数覆盖初始化器,为什么会自动提供带有空参数的初始化器?

  28. 28

    为什么我收到“未初始化的变量”错误

  29. 29

    为什么动画结束后我的元素不再隐藏?

热门标签

归档