iOS响应者链

参考好文

iOS开发-事件传递响应链,用运行时分析

iOS事件传递:响应者链[译]

http://www.jianshu.com/p/ef83a798121c
图都是搬过来总结的

总结

  1. 操作系统会把一系列单击事件包装成UITouch和UIEvent形式的实例。
事件响应链

图中的都是UIResponder的子类对象。
UIResponer提供四个用户点击的回调方法


屏幕快照 2016-08-12 下午3.53.58.png

UIVIew中的两个方法

- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;   // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;   // default returns YES if point is in bounds

上面四个方法 + 2个方法有什么联系呢

当一个点击事件发生时,从UIApplication开始调用pointInSide: WithEvent:直到最低层的UIVIew,若返回YES,则调用hitTest: withEvent:,压入response栈,遍历到最低层UIView后,开始出栈 (使用nextResponder),每pop一个检测是否响应事件,以此下去,直到事件得到了处理或者到达AppDelegate后依旧未响应,事件被摒弃为止

屏幕快照 2016-08-12 下午4.20.33.png
屏幕快照 2016-08-12 下午4.20.53.png

响应者链是由一系列响应者连成的链

  • 很多类型的事件的传递都依赖于响应者链。响应者链是一系列连接在一起的响应者对象。它从第一响应者(栈顶的view)开始,以application
    对象结束。如果第一响应者不能处理这个事件,它会把这个事件沿着这个响应者链传递到下一个响应者。
  • 一个响应者对象是一个能响应并能处理事件的对象。UIResponder类是所有响应者的父类,它定义了事件处理和常见响应者行为的通用编程接口。UIApplication,UIViewController以及UIView类的实例对象都是响应者,这表明,所有视图和绝大多数主控制器都是响应者。需要注意的是核心动画的图层对象不是响应者
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、响应者链(Responder Chain) 先来说说响应者对象(Responder Object),顾名思义,...
    像小强一样活着阅读 11,776评论 8 76
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 58,969评论 51 604
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 11,313评论 4 26
  • 响应者链顾名思义就是由一系列能够响应事件的响应者对象组成的一个层式结构。我们把具有响应和处理事件能力的对象称为响应...
    Nicole__Zhang阅读 3,056评论 0 2
  • 一篇搞定事件传递、响应者链条、hitTest和pointInside的使用发生触摸事件后,系统会将该事件加入到一个...
    克鲁德李阅读 4,811评论 0 1

友情链接更多精彩内容