美文网首页
iOS使用hit-testing,事件响应者链的工作原理

iOS使用hit-testing,事件响应者链的工作原理

作者: 博BlingBing | 来源:发表于2016-05-19 17:40 被阅读329次

iOS使用hit-testing寻找触摸的view。 Hit-Testing通过检查触摸点是否在关联的view边界内,如果在,则递归地检查该view的所有子view。在层级上处于lowest(就是离用户最近的view)且边界范围包含触摸点的view成为hit-test view。确定hit-test view后,它传递触摸事件给该view。

官方小例子事件响应者链如下图所示:

386B3F93-2F8B-4848-956C-0152E797B5F1.png
  • 触摸点在view A中,所以要先检查子view B和C。
  • 触摸点不在view B中,但在C中,所以检查C的子view D和E。
  • 触摸点不在D中,但在E中。View E是这个层级上处于lowest的- view的边界范围包含触摸点,所以它成为了hit-test view。
    Hit-test view是处理触摸事件的第一选择,如果hit-test view不能处理事件,该事件将从事件响应链中寻找响应器,直到系统找到一个处理事件的对象。若不能处理,则就有事件传递链了,继续看下面的事件传递链。

事件传递链如下图所示:

iOS_responder_chain.png
左半图:

initial view若不能处理事件,则传到其父视图view
view若不能处理,则传到其父视图,因为它还不是最上层视图
这里view的父视图是view controller的view,因为这个view也不能处理事件,因此传给view controller
若view controller也不能处理此事件,则传到window
若window也不能处理此事件,则传到app单例对象Application
若UIApplication单例对象也不能处理,则表示无效事件
右半图:

initial view一直传递直到最上层view(原话:A view passes an event up its view controller’s view hierarchy until it reaches the topmost view.)
topmost view传递事件到它所在的控制器(原话:The topmost view passes the event to its view controller.)
view controller传递事件到topmost view的父视图,重复前三步,走到到达root controller(原话:passes the event to its topmost view’s superview. Steps 1-3 repeat until the event reaches the root view controller.)
由root控制器传递事件到window(原话:The root view controller passes the event to the window object.)
若window也不能处理此事件,则传到app单例对象Application
若UIApplication单例对象也不能处理,则表示无效事件

hit-testing还有两点点个人感觉比较关键的点。
一、首先这个View它会检查自己是否能够接收触摸事件(有三点不能接收触摸事件:1、透明度<0.1,2、hidden=YES的时候,3、userInteractionEnabled = NO),然后它才会判断当前点在不在自己身上
二、当它遍历子控件的时候,是倒序遍历的

相关文章

  • iOS 响应链

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

  • iOS使用hit-testing,事件响应者链的工作原理

    iOS使用hit-testing寻找触摸的view。 Hit-Testing通过检查触摸点是否在关联的view边界...

  • 响应链是如何工作

    那么响应链是如何工作,正确找到应该响应该事件的响应者的?UIKit使用基于视图的hit-testing来确定tou...

  • 一文搞懂响应者链

    以往每次在处理到拦截事件或者传递事件的时候,会想到响应者链,通过重写hit-testing方法去修改,但是真正写的...

  • 事件的响应链与传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。i...

  • iOS 中事件的响应链和传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。i...

  • iOS 中事件的响应链和传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。i...

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

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

  • ios响应者链

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

  • 二、事件传递链和响应者链

    iOS触摸事件详解iOS开发-事件传递响应链 响应者链 UIResponser包括了各种Touch message...

网友评论

      本文标题:iOS使用hit-testing,事件响应者链的工作原理

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