IOS事件传递和响应

1、触摸屏幕产生触摸事件

触摸屏幕产生触摸事件后,触摸事件会被添加到由UIApplication管理的事件队列中(之所以不是栈是因为栈是先进后出而队列是先进先出)

2、事件传递

2.1、UIApplication从事件队列中取出最前的事件传递给keyWindow

2.2、keyWindow在视图层次结构寻找最适合响应的视图来处理事件

2.3、最合适的view会调用自己的touches方法处理事件

备注:事件传递通过hitTest进行,可以在hitTest方法中处理,是超出父视图frame的视图响应事件

3、事件响应

3.1、如果最适合的view能够响应事件,则响应事件,否则将事件传递给给上级视图。

3.2、如果上级视图不能响应,继续向上级视图传递。一直传递到ViewController,如果ViewController的view不能响应事件,则继续传递给父控制器的view,一直传递到window,如果Window不能响应则传递给UIApplication,如果application还是不能响应则丢弃该事件。

3.3、在事件响应中如果视图实现了touches则响应,否则调用supertouches向上传递

总结

事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容