美文网首页
什么是响应者链

什么是响应者链

作者: jinlei_123 | 来源:发表于2016-09-22 12:20 被阅读0次

响应者链条是由多个响应者对象连接起来的链条,其中响应者对象是能处理事件的对象,所有的View和ViewController都是响应者对象,利用响应者链条能让多个控件处理同一个触摸事件.

事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播. 可以说点事件的分发,传递以及处理。具体可以去看下touch事件这块。

简单的说,  在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。这种有响应和处理事件的对象,我们称之为“响应者对象”。

UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件

响应者链的事件传递机制:

如果当前view不能处理当前事件,那么事件将会沿着响应者链(Responder Chain)进行传递,直到遇到能处理该事件的响应者(Responsder Object)。

响应者链的事件传递过程。

(1)如果view的控制器存在,就传递给控制器;如果控制器不存在,则将其传递给它的父视图

(2)在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理

(3)如果window对象也不处理,则其将事件或消息传递给UIApplication对象

(4)如果UIApplication也不能处理该事件或消息,则将其丢弃

响应者链

响应者链是由一个一个响应者组成的长链;

响应者链定义了iOS中触摸事件的交互规则;

如果hit-test检测出的view没有响应事件,事件就会沿着响应者链往下传递;

如果链中某个响应者响应了事件或者已经没有响应者了,传递就会结束。

触摸检测(Hit-Test)

通过触碰检测找出Touch发生在哪个视图上,递归检测所有子视图,定位准确位置;

如果触摸发生在E上;

Touch在A Bounds内;

检测子视图B和C;

如果Touch没在B里,在C里;

检测D和E;

Touch没在D里,在E里,且E没子视图。

调整事件传递

关闭事件的传递:userInteractionEnable 属性设置为NO,此属性是UIView的,所有子类都能设置。当视图hidden属性为YES或者alpha为0时,视图也不接受事件。

在一定时间内关闭事件传递:应用程序调用UIApplication的benginIgnoringInteractionEvents和endIgnoringInteractionEvents.

UIEvent

UIEvent:事件,是由硬件捕获到的一个表示用户操作设备的对象;

事件分为三类:触摸事件、晃动事件、远程控制事件;

UIResponder

UIResponder:响应者,是可以响应事件并且可以对其进行处理的对象;

UIResponder是响应者的基类,UIApplication、UIView和所有从UIView派生出来的子类都是源自它;

第一响应者是当前正在接受事件的响应者对象。

UITouch

UITouch:手指,表示触摸事件的一个手指;

UIView支持触摸事件,而且支持多点触摸;

需要定义UIView子类,实现触摸相关的方法;

touchesBegan:withEvent://开始触摸

touchesMoved:withEvent://手指移动

touchesEnded:withEvent://结束触摸

touchesCancelled:withEvent://触摸终端

locationInView://当前手指位置

previousLocationView://上一次手指位置

iOS默认的是单点触摸,如果想要支持多点触摸,需要将multipleTouchEnabled 设置为YES,默认是NO。

总结一下iOS 视图不响应点击事件的可能性:

view的userInteractionEnable 没有设置为YES;

子视图 超过 父视图的显示区域;

当视图hidden属性为YES或者alpha为0时;

其他欢迎补充。

相关文章

  • iOS 响应链

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

  • ios响应者链

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

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

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

  • 基于ResponderChain的事件传递

    ResponderChain对象交互方式本质 响应者链简介 Responder Chain也就是响应链,响应者链是...

  • 什么是响应者链

    响应者链条是由多个响应者对象连接起来的链条,其中响应者对象是能处理事件的对象,所有的View和ViewContro...

  • UIKit之触摸、响应者链

    触摸 响应者链 //响应者链多个响应者组成的链//首先执行检测过程,信息先从UIApplication->Appd...

  • iOS中触摸事件的响应者链及手势识别器

    用户触摸事件是依赖于响应者链来处理 -响应者链:第一响应者是视图或者其子类主要负责接收用户触摸事件;第一响应者会将...

  • 响应者链

    1> 什么是响应者链 响应者链条是由多个响应者对象连接起来的链条,其中响应者对象是能处理事件的对象,所有的View...

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

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

  • 响应者链

    很多类型事件的传递都依赖于响应者链。响应者链是一系列响应者对象的关系集。它始于第一响应者而终于Applicatio...

网友评论

      本文标题:什么是响应者链

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