美文网首页
2019-11-11 ios 响应者链理解

2019-11-11 ios 响应者链理解

作者: 北你妹的风 | 来源:发表于2019-11-11 17:16 被阅读0次

响应者链即Responder Chain,是有一定层级关系的连接在一起的响应者对象集合。

响应者对象,即能够接受和处理事件的对象,在ios系统中,所有的响应者对象都是直接或间接继承自UIResponder类。

比较熟悉的类有UIApplication,UIWindow,UIViewController,UIView等。我们都知道,CALayer不能添加或处理事件,就是因为

CALayer不是继承自UIResponder类。

响应链执行的过程,就是寻找第一响应者对象的过程。这个过程大概是这样的:

1、设备产生触摸、加速器等事件后,系统把事件封装成UIEvent对象,并通过RunLoop添加到UIApplication持有的事件队列中

2、UIApplication取出事件,并分发给UIWindow

3、然后依次在UIWindow的子类中调用方法-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event   

4、hitTest方法会调用方法-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event    来判断操作区域是否在当前视图中

5、hitTest方法会过滤掉hidden属性为YES、userInteractionEnabled属性为NO,  alpha值小于0.01的子视图

6、UIWindow的子类会在自己的子类中递归调用hitTest方法,直到该方法返回最后一个非空的UIView对象,这个对象就是第一响应者。

而事件的响应过程,和响应链的执行过程刚好是相反的。过程大致如下:

1、判断第一响应者能否处理事件,如果能,则直接处理。

2、如果不能,则通过调用nextResponder方法,顺着响应者链寻找下一个响应者。

3、如果下一个响应者也不能处理该事件,则顺着响应链继续往下寻找。

4、直到下一个响应者对象为UIApplicationDelegate对象时,如果UIApplicationDelegate不能处理该事件,那么系统就会结束查找,并抛弃该事件。

响应链除了帮我们更深刻的理解界面交互的理论基础,还有以下用途:

1、查找UIView对应的UIViewController

2、扩大视图响应或者点击区域(通过重写pointInside方法)

3、帮助我们排除视图点击不响应的问题

相关文章

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • iOS基础篇-事件处理

    1、首先需要理解iOS事件处理机制 理解事件处理、响应者、响应者链概念https://developer.appl...

  • iOS中对于响应链的理解

    对于响应链的理解: 在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是...

  • 2019-11-11 ios 响应者链理解

    响应者链即Responder Chain,是有一定层级关系的连接在一起的响应者对象集合。 响应者对象,即能够接受和...

  • iOS响应者链

    iOS响应者链

  • ios响应者链

    iOS 响应者链 字数418 阅读41 评论0 喜欢3 响应者链 响应者链是一个响应者的连接序列,事件或者动作消息...

  • iOS UI事件传递与响应者链

    iOS UI事件传递与响应者链 响应者链 响应者对象:继承自UIResponder的对象称之为响应者对象。UIAp...

  • 转载:响应者链工作原理

    响应者链 响应者链是由一个一个响应者组成的长链;响应者链定义了iOS中触摸事件的交互规则;如果hit-test检测...

  • iOS 响应者链理解

    理解 响应者链主要包含两个部分,一个是事件的传递,另外一个是响应事件 事件传递 触摸屏幕,产生事件,将事件传递到U...

  • iOS中事件处理机制——触摸、手势、控制

    响应者链 首先,想要理解事件的处理机制必须要知道iOS中响应者链,要明白事件是怎么传递的。 如上图,假设我们点击v...

网友评论

      本文标题:2019-11-11 ios 响应者链理解

      本文链接:https://www.haomeiwen.com/subject/vditictx.html