美文网首页
说说响应者链条

说说响应者链条

作者: 浮云我想听你说 | 来源:发表于2016-08-21 16:57 被阅读0次

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

1> 首先解释响应者链的概念

UIResponder类,是UIKit中一个用于处理事件响应的基类。窗口上的所有事件触发,都有该类响应(即事件处理入口)。所以,窗口上的view及控制器都是派生于该类的。开入UIView。UIViewController等。调用UIResponder类提供的方法或属性,我们就可以捕捉到窗口上所以得响应事件的对象,所有的view和viewcontroller都是响应者对象,利用响应者链条能让多个控件处理同一个触摸事件。

2>事件传递机制

如果当前view不能处理当前事件,那么事件将会沿着响应者链(Responder Chain)进行传递,直到遇到能处理该事件的响应者。
1)接收事件的initial view如果不能处理改事件,边切她不是顶层的view,则事件会往她的父view进行传递。 2)initial view的父view获取事件后如果仍不能处理,则继续往上传递,循环这个过程。如果顶层的view还是不能处理这个事件的话,则会将事件的触底给他们的viewcontroller。 3)如果viewcontroller也不能处理,则传递给window,此时window不能处理的话就将事件传递UIApplication,最后如果连Application也不能处理,则废弃该事件。

如果可以处理
通过事件传递找到最合适的处理触摸事件的view后(就是最后一个pointInside返回YES的view,它是第一响应者),如果该view是控制器view,那么上一个响应者就是控制器。如果它不是控制器view,那么上一个响应者就是前面一个pointInside返回YES的view(其实就是它的父控件)。 最后这些所有pointInside返回YES的view加上它们的控制器、UIWindow和UIApplication共同构成响应者链条。响应者链条是自上而下的(我把window上最外面的那个view称为上),前面的事件传递是自下而上的。

响应者链条的作用

可以让一个触摸事件让多个响应者同时处理该事件。
能够在多个view内打印出touchBegan就是利用了此作用,

  • (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchBegan---%@", [self class]);
    [super touchesBegan:touches withEvent:event];
    }

最大的view先执行 , 倒序遍历的子控件再依次执行同名的方法。

相关文章

  • 说说响应者链条

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

  • 响应者链

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

  • 什么是响应者链

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

  • 响应者链条

    1.什么是事件响应链2.touch 事件分发3.hit-test 底层实现4.应用 1.什么是事件响应链 大多数事...

  • 响应者链条

    什么是事件? iOS中事件分为3大类 : 触摸事件, 加速计事件和远程控制事件.当你的手指在手机屏幕上触摸时, 产...

  • 响应者链条

    响应者链条:是由多个响应者对象连接起来的链条 作用:能很清楚的看见每个响应者之间的联系,并且可以让一个事件多个对象...

  • 响应者链条

    ** 响应者链条** 在iOS中不是任何对象都能处理时间,只有继承了UIResponder的对象才能接收并处理事件...

  • 响应者链条

  • 响应者链条

    简单来说就是 :一级一级的找到响应的视图,如果没有就传给UIWindow实例和UIApplication实例,要是...

  • 响应者链条

    所有控件的多点触摸默认是关闭的。需要使用多点触摸时要手动打开。 UIView的属性:保存是否打开多点触摸的属性 @...

网友评论

      本文标题:说说响应者链条

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