美文网首页
转载:响应者链工作原理

转载:响应者链工作原理

作者: yyMae | 来源:发表于2016-02-17 15:47 被阅读133次

    响应者链

    响应者链是由一个一个响应者组成的长链;
    响应者链定义了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时;

    其他欢迎补充。

    本文转自:李剑飞的技术博客
    原文 http://lijianfei.sinaapp.com/?p=599

    相关文章

      网友评论

          本文标题:转载:响应者链工作原理

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