Fork me on GitHub

iOS事件传递和响应过程

https://cdn.pixabay.com/photo/2017/07/31/21/45/sea-2561397__340.jpg

我们在平常的开发中肯定经常使用到各种事件,如:button的点击,scrollView的滑动,tableView的Cell的点击等一系列事件,那么他的底层到底是怎么处理的呢?是怎么样传递的,下面会解决以下几个问题。

  1. 为什么子视图超出了其父视图时,超出的部分默认无法触发事件
  2. 为什么父视图关闭事件响应时,其之后的全部视图均无法响应事件
  3. 为什么子视图关闭事件时,我们点击子视图时,事件会触发到其父视图

在iOS系统中事件包括

  1. 触屏事件(例如点击按钮、通过手势缩放图片、拖动上下滚动页面等)
  2. 加速计事件(例如摇一摇红包、通过旋转设备控制赛车方向、指南针等)
  3. 远程控制事件(例如耳机的线控、外接手柄、遥控器等)

目前主要研究触摸事件的传递和响应过程


在触摸事件的处理过程中会有 事件传递 和 事件响应过程,首先当用户触摸屏幕时,会从上向下

(UIApplication->keyWindow->vc->View->View1...)

找到最合适的对象,当找到最合适的View时会由下向上

(...View1->keyWindow-> View-> vc-> keyWindow-> UIApplication)

找最合适响应的对象。

参考

  1. http://blog.flight.dev.qunar.com/2016/10/28/ios-event-mechanism-summary/
  2. http://www.jianshu.com/p/2e074db792ba
- END -
扫一扫上面的二维码图案,加我微信

文章作者:梁大红

特别声明:若无特殊声明均为原创,转载请注明,侵权请联系

版权声明:署名-非商业性使用-禁止演绎 4.0 国际