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向上传递
总结
事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件。
网友评论