你的位置:首页 > 软件开发 > 操作系统 > Event Delivery: The Responder Chain(事件传递,响应链)

Event Delivery: The Responder Chain(事件传递,响应链)

发布时间:2015-04-05 15:03:07
当我们设计app的时候,我们很可能想动态的响应事件。例如,触摸一个拥有许多不同对象的屏幕,你要决定给哪个对象一个响应事件,怎么样对象接收到事件。当一个用户产生事件发生时(如 点击),UIKit产生一个对象,这个包含要被处理的对象的信息。接着把事件对象放到active apps( ...

Event Delivery: The Responder Chain(事件传递,响应链)

当我们设计app的时候,我们很可能想动态的响应事件。例如,触摸一个拥有许多不同对象的屏幕,你要决定给哪个对象一个响应事件,怎么样对象接收到事件。

当一个用户产生事件发生时(如 点击),UIKit产生一个对象,这个包含要被处理的对象的信息。接着把事件对象放到active app's(一个application对象,负责初始化用户事件路由、从全局管理一个运行的application)事件队列中。对于触摸事件,这个对象是一组触摸,打包放在UIEvent对象。对motion事件而言,事件对象根据你使用框架的不同和你感兴趣的motion事件类型而有所差异。

一个事件对象沿一个明确的路径传递,直到有个对象可以处理它。首先,单例UIApplication对象从队列的顶部取一个事件,并进行分发处理。一般,UIApplication对象把事件发给应用的key window 对象,key window对象传递给一个initial对象来处理。这个initial对象取决于事件的类型。

  • Touch events。对于触摸事件,window对象首先尝试将事件发送给事件发生的view(hit-test view)。找到hit-test view的过程被称为hit-testing(我们将在后边谈到)。
  • Motioin and remote control enents。这类事件,window对虾ing发送shaking-motion或者remote control event给第一响应者处理。

事件路径(event paths)的终极目标是找到一个对象来处理响应一个事件。因此,UIKit首先把这个事件发送给最适合处理这个时间的对象。对于触摸事件,这个对象是hit-test view;对于其他事件,这个对象是第一响应者。下面的部分介绍关于确定hit-test view 和 第一响应者的更多细节。

Hit-Testing Returns the View Where a Touch Occurred(hit-test返回触摸发生的view)。有的地方翻译感觉很别扭,为了避免误导(真的有人看吗?),原文贴上。

iOS use hit-testing fo find the view that is under a touch. Hit-testing involves checking whether a touch is within the bounds fo any relevant(更多强调直接相关) view objects. If it is, it recursively checks all of that view's subviews. The lowest view in the view hierarchy that contains the touch point becomes the hit-test view. After iOS determines the hit-test view, it passes the touch event to that view for handling.

举例说明,假设用户在View E中触摸,iOS通过用下面的次序检查subviews来查找hit-test view:

  1. 触摸在view A的bounds内,所以检查subview B和C;
  2. 触摸不在View B的bounds内,但在View C的bounds内,所以检查subview D和E;
  3. 触摸不在View D的bounds内,但在view E的bounds内。

     

    海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

    原标题:Event Delivery: The Responder Chain(事件传递,响应链)

    关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录