iOS 事件传递机制和响应机制

1.事件的传递和响应的区别

-事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件。

2.事件的传递

-查看UIEventType,我们可以知道 有下面四类事件

UIEventTypeTouches: 触摸事件

UIEventTypeMotion: 运动事件,类似 微信摇一摇事件

UIEventTypeRemoteControl: 远程控制事件,比如播放/暂停 音乐等

UIEventTypePresses: 物理按钮事件 (按压事件指对一个游戏控制器、苹果TV远程,或其他有物理按钮的设备之间的交互,所以对于iPhone的手机而言在没有物理按键连接的情况下,是无法触发该事件的)

-触摸事件的传递是从父控件传递到子控件;触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中,传递的过程也就是UIApplication->window->寻找处理事件最合适的view

3.事件的响应

先上图:

能响应事件的都是UIResponder及其子类,常见的UIResponder的子类有:UIView、UIViewController、UIApplication和UIApplicationDelegate

 -1 控件的下一个响应者是它的父视图view;如果view是控制器的view,那么控制器就是下一个响应者,事件就传递给控制器;如果当前view不是控制器的view,那么父视图就是当前view的下一个响应者,事件就传递给它的父视图

-2 在视图层次结构的最顶级视图,如果也不能处理收到的事件,则其将事件传递给window对象进行处理

-3 如果window对象也不处理,则其将事件或消息传递给UIApplication对象

-4 如果UIApplication和UIApplicationDelegate都不能处理该事件,该事件就会被忽略

参考:

1. Using Responders and the Responder Chain to Handle Events

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容