码迷,mamicode.com
首页 > 移动开发 > 详细

ios中事件的响应链(Responder chain)和传递链

时间:2017-06-21 23:05:04      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:cat   开始   roo   概念   ...   iap   root   ios   视图   

事件的响应链涉及到的一些概念

  • UIResponder类,是UIKIT中一个用于处理事件响应的基类。窗又上的所有事件触发,都由该类响应(即事件处理入又)。所以,窗又上的View及控制器都是 派生于该类的,例如UIView、UIViewController等。

  • 调用UIResponder类提供的方法或属性,我们就可以捕捉到窗又上的所有响应 事件,并进行处理。

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

技术分享

如上图,响应者链有以下特点:

响应者链通常是由 initial view 开始;

  • UIView 的 nextResponder 它的 superview;如果 UIView 已经是其所在的 UIViewController 的 top view,那么 UIView 的 nextResponder 就是 UIViewController;

  • UIViewController 如果有 Super ViewController,那么它的 nextResponder 为其 Super ViewController 最表层的 View;如果没有,那么它的 nextResponder 就是 UIWindow;

  •  UIWindow 的 contentView 指向 UIApplication,将其作为 nextResponder;

  •  UIApplication 是 个响应者链的终点,它的 nextResponder 指向nil,整个

    responder chain 结束。 

Hit-Test View 与 Hit-Testing 

技术分享

 

假设用户触摸了上图的 View E 区域,那么 iOS 将会按下面的顺序反复检测 subview 来寻找 Hit-Test View

  1. 触摸区域在视图 A 内,所以检测视图 A 的 subview B 和 C;

  2. 触摸区域不在视图 B 内,但是在视图 C 内,所以检查视图 C 的 subview D 和 E;

  3. 触摸区域不在视图 D 内,在视图 E 中;

视图 E 在整个视图体系中是 lowest view,所以视图 E 就是 Hit-Test View 。 

事件的链有两条:事件的响应链;Hit-Testing 时事件的传递链。

  •  响应链:由离 户最近的view向系统传递。 initial view –> super view –> .....–> view controller –> window –> Application –> AppDelegate

  •  Hit-Testing 链:由系统向离 户最近的view传递。 UIKit –> active app‘s event queue –> window –> root view –>......–>lowest view 

ios中事件的响应链(Responder chain)和传递链

标签:cat   开始   roo   概念   ...   iap   root   ios   视图   

原文地址:http://www.cnblogs.com/wangliang2015/p/7061933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!