响应者链的事件分发

响应者链的事件分发:从Window的视图开始分发向上传(向内部传),一定要分清楚谁是谁的子视图以及同级视图中他们的先后顺序,具体流程请看代码

//分发事件的方法

/*

0.判断该点是否在视图内,如果不是返回nil

1.遍历子视图(倒序)

2.转换坐标系

3.分发给子视图

4.查看触摸点在不在子视图中 在的话子视图调用hitTest,如果有返回值,直接返回,循环结束,方法结束

5.如果没有,返回self

*/

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{

NSLog(@"-----a");

// 0.判断点 是否在本身的bounds内

BOOL inside =  [self pointInside:point withEvent:event];

if (!inside) {

return nil;

}

//1.遍历子视图

for (int i =(int)self.subviews.count-1;i>=0; i--) {

//获取subView

UIView *subView = [self.subviews objectAtIndex:i];

//converPoint toView转换到子视图的坐标系

CGPoint p = [self convertPoint:point toView:subView];

//判断子视图的hitTest方法有没有返回值,如果没有返回值,继续循环

UIView *view = [subView hitTest:p withEvent:event];

if ([subView pointInside:p withEvent:event]) {

if (view) {

return view;

}

}

}

//5.r如果没有子视图,返回self

return self;

}

时间: 2024-12-27 09:39:24

响应者链的事件分发的相关文章

响应者链触摸事件

触摸事件 在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型 触摸事件: 加速计事件: 远程控制事件: 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder UIResponder内部提供了以下方法来处理事件 触摸事件

iOS开发 - 响应者链触摸事件

触摸事件 在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型 触摸事件: 加速计事件: 远程控制事件: 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为"响应者对象" UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder UIResponder内部提供了以下方法来处理事件

iOS开发响应者链触摸事件

触摸事件 在用户使用app过程中,会产生各种各样的事件 iOS中的事件可以分为3大类型 触摸事件: 加速计事件: 远程控制事件: 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder UIResponder内部提供了以下方法来处理事件 触摸事件

响应者链的事件传递过程

1.如果view的控制器存在,就传递给控制器:如果控制器不存在,则将其传递给它的父视图 2.在视图层次结构的最顶级视图,如果也不能处理收到的事件或消息,则其将事件或消息传递给window对象进行处理 3.如果window对象也不处理,则其将事件或消息传递给UIApplication对象 4.如果UIApplication也不能处理该事件或消息,则将其丢弃

ios 事件响应者链

对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Motion Event) 3.远端控制事件(Remote-Control Event) 响应者链条概 念: iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活动Application的事件队列,单例的 UIApplication会从事件队列中取出触摸事件并传递给单例的UIWin

Cocoa Touch事件处理流程--响应者链

Cocoa Touch事件处理流程--响应者链 一.事件分类 对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Motion Event) 3.远端控制事件(Remote-Control Event) 今天以触屏事件(Touch Event)为例,来说明在Cocoa Touch框架中,事件的处理流程.首先不得不先介绍响应者链这个概念: 二.响应者链(Responder

iOS响应者链

首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方.事件将沿着响应者链一直向下传递,直到被接受并做出处理.一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对

响应者链

响应者链即一系列响应者对象组成的层次结构. 理解响应者链需要理清的两个概念(仅以触屏事件Touch Event为例): 1.First Responder,当前接受触摸的响应者对象,通常是一个UIView对象,作为响应者链的开端.整个响应者链和事件分发的使命就是找出First Responder. 2.hit-test view,为找出First Responder,系统从上到下(UIWindow->lowest view)检测响应者对象的过程. 具体的检测流程如下: UIWindow实例对象会

UI-事件,触摸与响应者链(一)

首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应 者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会.当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发 生的视图,也就是用户触摸屏幕的地方.事件将沿着响应者链一直向下传递,直到被接受并做出处理.一般来说,第一响应者是个视图对象或者其子类对象,当其被 触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控