【响应链】cocoatouch事件处理流程深入解析

百般思念 提交于 2019-12-05 13:19:56

###cocoatouch 事件处理流程

apple 文档

传递链和响应链

传递链:由系统向离用户最近的view传递。UIKit –> active app’s event queue –> window –> root view –>……–>lowest view
响应链:由离用户最近的view向系统传递。initial view –> super view –> …..–> view controller –> window –> Application
在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类.
用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理。
一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,
如果它不处理,事件就会被传递给它的视图控制器对象viewcontroller(如果存在),
然后是它的父视图(superview)对象。

###避开事件处理

UIView不接受触摸事件的三种情况:

1.不接收用户交互
userInteractionEnabled = NO

2.隐藏
hidden = YES

3.透明
alpha = 0.0 ~ 0.01
注意:UIImageView的userInteractionEnabled默认就是NO,
因此UIImageView以及它的子控件默认是不能接收触摸事件的

###事件分类

1、触屏事件(Touch Event)

2、运动事件(Motion Event)

3、远端控制事件(Remote-Control Event)

###响应者链(Responder Chain)

有响应和处理事件能力的对象。响应者链就是由一系列的响应者对象构成的一个层次结构。

响应流程

如果view是控制器的view,就传递给控制器.
如不是,则将其传递给它的父视图 在视图层次结构的最顶级视图,
如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理 
如果window对象也不处理,则其将事件或消息传递给UIApplication对象 
如果UIApplication也不能处理该事件或消息,则将其丢弃
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!