美文网首页
响应者链(Responder Chain)

响应者链(Responder Chain)

作者: Kakarrot | 来源:发表于2016-08-11 21:34 被阅读40次

什么是事件响应链

对于ios设备的用户来说,我们操作手机的方式有三种:触摸屏幕、晃动设备、通过遥控设施控制设备。
对应的有下面三响应时间类型:

  • 触屏事件(Touch Event)
  • 运动事件 (Motion Event)
  • 远端控制事件 (Remote-control Event)

响应者链条

  • 响应者对象:能够响应和处理响应事件能力的对象。响应者链条就是有响应者对组成的层次结构。
  • UIResponder类 能够响应和处理响应事件的基类,所有能够响应和处理响应事件的类都直接或间接继承与该类。我们熟悉的UIApplication、 UIViewController、UIWindow和所有继承自UIView的UIKit类都直接或间接的继承自UIResponder,所以它们的实例都是可以构成响应者链的响应者对象。

响应者链条有以下特点:

  • 响应者链通常是由视图(UIView)构成的;
  • 一个视图的下一个响应者是它视图控制器(UIViewController)(如果有的话),然后再转给它的父视图(Super View);
  • 视图控制器(如果有的话)的下一个响应者为其管理的视图的父视图;
  • 单例的窗口(UIWindow)的内容视图将指向窗口本身作为它的下一个响应者需要指出的是,Cocoa Touch应用不像Cocoa应用,它只有一个UIWindow对象,因此整个响应者链要简单一点;
  • 单例的应用(UIApplication)是一个响应者链的终点,它的下一个响应者指向nil,以结束整个循环。

点击屏幕时是如何互动的

  • iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活动Application的事件队列,单例的UIApplication会从事件队列中取出触摸事件并传递给单例的UIWindow来处理,UIWindow对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为hit-test view。
  • UIWindow实例对象会首先在它的内容视图上调用hitTest:withEvent:,此方法会在其视图层级结构中的每个视图上调用pointInside:withEvent:(该方法用来判断点击事件发生的位置是否处于当前视图范围内,以确定用户是不是点击了当前视图),如果pointInside:withEvent:返回YES,则继续逐级调用,直到找到touch操作发生的位置,这个视图也就是要找的hit-test view。
  • hitTest:withEvent:方法的处理流程如下:首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;若返回NO,则hitTest:withEvent:返回nil;若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从最顶层视图一直到到最底层视图,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。

事件的传递和响应分两个链:

  • 传递链:由系统向离用户最近的view传递。UIKit –> active app’s event queue –> window –> root view –>……–>lowest view
  • 响应链:由离用户最近的view向系统传递。initial view –> super view –> …..–> view controller –> window –> Application

相关文章

  • iOS 响应者链 整理

    一、响应者链(Responder Chain) 先来说说响应者对象(Responder Object),顾名思义,...

  • 基于ResponderChain的事件传递

    ResponderChain对象交互方式本质 响应者链简介 Responder Chain也就是响应链,响应者链是...

  • iOS 响应者链 在View中实现页面跳转

    响应者链(Responder Chain) (1)响应者对象(response Object)指的是有响应和处理”...

  • iOS 响应者链

    概述 iOS 响应者链(Responder Chain) 是支持App界面交互的重要基础, 点击, 滑动, 旋转,...

  • iOS 响应者链

    一、概述 iOS 响应者链(Responder Chain)是支撑 App 界面交互的重要基础,点击、滑动、旋转、...

  • 响应者链(Responder Chain)

    响应者链条主要分为两部分:事件的传递链条和事件的响应链条。 1、事件的传递链条: 当屏幕发生触摸事件后,系统会将事...

  • 响应者链(Responder Chain)

    什么是事件响应链 对于ios设备的用户来说,我们操作手机的方式有三种:触摸屏幕、晃动设备、通过遥控设施控制设备。对...

  • iOS 事件传递&响应者链

    iOS中的响应者链(Responder Chain)是用于确定响应者的一种机制。其中的事件主要指触摸事件(Touc...

  • 2019-11-11 ios 响应者链理解

    响应者链即Responder Chain,是有一定层级关系的连接在一起的响应者对象集合。 响应者对象,即能够接受和...

  • iOS响应者链彻底掌握2019-04-22

    概述 iOS响应者链(Responder Chain)是支撑App界面交互的重要基础,点击、滑动、旋转、摇晃等都离...

网友评论

      本文标题:响应者链(Responder Chain)

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