xml地图|网站地图|网站标签 [设为首页] [加入收藏]

UI事件传递与响应者链

来源:http://www.ccidsi.com 作者:集成经验 人气:106 发布时间:2020-04-15
摘要:响应者对象:世袭自UIResponder的对象称之为响应者对象。UIApplication、UIView、UIViewController和装有世袭UIView的UI基特类都直接或直接的延续自UIResponder。如下图的接续关系图: 响应者链 UI世

响应者对象:世袭自UIResponder的对象称之为响应者对象。UIApplication、UIView、UIViewController和装有世袭UIView的UI基特类都直接或直接的延续自UIResponder。如下图的接续关系图:

响应者链

图片 1UI世袭关系图

响应者对象:世襲自UIResponder的指标称之为响应者对象。UIApplication、UIWindow、UIViewController和有着世襲UIView的UIKit类都一向或直接的接续自UIResponder。

UIResponder日常响应以下三种事件:触摸事件(touch handling卡塔尔国、点按事件(press handling卡塔尔国、加速事件和长间距调节事件。

UIResponder日常响应以下两种事件:触摸事件(touch handling卡塔尔、点按事件(press handling卡塔尔国、加快事件和长途调控事件:

由三个响应者组合起来的链条,就称为响应者链。它意味着了各种响应者之间的联络,何况能够使得一个事变可选拔多少个目的管理

触摸事件(touch handlingState of Qatar

图片 2响应链

- (void)touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event;

假若触摸了initial view,

- (void)touchesMoved:(NSSet *)touches withEvent:(nullable UIEvent *)event;

1.首先响应者便是initial view即initial view首先响应touchesBegan:withEvent:方法,接着传递给橘淡绿的view

- (void)touchesEnded:(NSSet *)touches withEvent:(nullable UIEvent *)event;

2.橘艳情的view最早响应touchesBegan:with伊芙nt:方法,接着传递给蛋黄色view

- (void)touchesCancelled:(NSSet *)touches withEvent:(nullable UIEvent *)event;

3.黄色色view响应touchesBegan:with伊夫nt:方法,接着传递给调节器的view

- (void)touchesEstimatedPropertiesUpdated:(NSSet *)touches NS_AVAILABLE_IOS(9_1);

4.调整器view响应touchesBegan:with伊夫nt:方法,调整器传递给了窗口

点按事件(press handling卡塔尔国 NS_AVAILABLE_IOS(9_0)

5.窗口再传递给application

- (void)pressesBegan:(NSSet *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);

举个例子上述响应者都不管理该事件,那么事件被吐弃

- (void)pressesChanged:(NSSet *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);

当一个触摸事件发生的时候,大家的主次是什么找到第一响应者的吗?

- (void)pressesEnded:(NSSet *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);

图片 3事件的发出与传递

- (void)pressesCancelled:(NSSet *)presses withEvent:(nullable UIPressesEvent *)event NS_AVAILABLE_IOS(9_0);

当您点击了显示屏会爆发一个触摸事件,音信循环会选拔到触摸事件放到音讯队列里,UIApplication会会从音信队列里取事件分发下去,首先传给UIWindow,UIWindow会使用hitTest:with伊夫nt:方法找到此番触摸事件初阶点所在的视图,找到这么些视图之后她就可以调用视图的touchesBegan:with伊夫nt:方法来处监护人件。

加速事件

在此大家先要明白多少个措施:

- (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);

- (nullableUIView*)hitTest:point withEvent:(nullableUIEvent*卡塔尔国event;称为方法A

- (void)motionEnded:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);

- pointInside:point withEvent:(nullableUIEvent*State of Qatarevent;称为方法B

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);

对view实行重写那五个议程后,就能够意识,点击显示屏后,首先响应的是方法A;

长间隔调节事件

一经方法A中,大家未有调用父类的那个法子,这就依赖那么些方法A的回来view,作为响应事件的view。(当然重返nil,便是以此view不响应)

- (void)remoteControlReceivedWithEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(4_0);

设若方法A中,大家调用了父类的这一个方式,也等于

响应者链:由多少个响应者组合起来的链子,就叫做响应者链。它表示了种种响应者之间的联络,况兼能够使得二个风云可筛选多少个对象管理

[superhitTest:pointwithEvent:event];那那时系统将要调用方法B;通过那些点子的重临值,来剖断当前以此view能或不可能响应音信。

图片 4

设若艺术B重返的是no,那就绝不再去遍历它的子视图。方法A重返的view正是足以响应事件的view。

响应者链.png

譬如措施B重临的是YES,那就去遍历它的子视图。(便是上海体育场地大家叙述的那样,找到符合的view重回,假使找不到,那就由方法A再次回到的view去响应这几个事件。)

假若触摸了initial view,

据此总括下来:

1.率先响应者正是initial view即initial view首先响应touchesBegan:with伊芙nt:方法,接着传递给橘高粱红的view

//再次来到一个view来响应事件 (咱们只要不想影响系统的风浪传递链,在此个方法内,最佳调用父类的那个法子)

2.橘香艳的view开头响应touchesBegan:with伊芙nt:方法,接着传递给灰黄色view

- (nullableUIView*)hitTest:point withEvent:(nullableUIEvent*)event;

3.日光黄色view响应touchesBegan:with伊芙nt:方法,接着传递给调节器的view

//重返的值可以用来判定是还是不是继续遍历子视图(再次回到的根据是触动的point是还是不是在view的frame范围内)

4.控制器view响应touchesBegan:with伊夫nt:方法,调整器传递给了窗口

- pointInside:point withEvent:(nullableUIEvent*)event;

5.窗口再传递给application

扔个轻松:

假诺上述响应者都不处理该事件,那么事件被打消

hitTest:with伊夫nt:查找进度

事件的发生和传递

本文由68399皇家赌场发布于集成经验,转载请注明出处:UI事件传递与响应者链

关键词: 68399皇家赌场 日记本 iOS

上一篇:C中的BOOL你了解吗

下一篇:没有了

最火资讯