美文网首页
iOS响应链

iOS响应链

作者: Corbin___ | 来源:发表于2018-09-17 15:08 被阅读0次

简单概要下

1.通过pointInside:的方法,寻找点击了那个视图,比如找到这个是CView(从UIWindow->父视图->子视图寻找)
2.再以CView为起点,通过hitTest来确定哪个是响应者
3.确定响应者可不可以响应事件,如果不行,就调用nextResponder


UIResponder

iOS中能够响应事件的对象都是继承UIResponder
iOS UIKit框架学习—UIResponder

UITouch

UITouch保存着跟手指相关的信息,比如触摸的位置、时间、阶段等。
当手指移动时,系统会更新同一个UITouch对象,使之能够一直保存该手指在的触摸位置。
当手指离开屏幕时,系统会销毁相应的UITouch对象。
所以,当用户用一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象,一根手指对应一个UITouch对象。

UIEvent

事件对象,记录事件产生的时刻和类型
每产生一个事件,就会产生一个UIEvent对象

响应链

响应链有两个过程,先进行事件的传递,再进行事件的响应

1.事件的传递

事件发生后,事件就被封装成UIEvent对象放入事件队列
UIApplication对象会将事件从队列顶部取出,通过sendEvent:方法进行派发
UIApplicationUIWindowsendEvent:方法
UIWindow接受到事件开始进行最优响应视图查询的过程,也就是hitTestpointInside的过程,通过这个过程寻找最优的响应者,其实这个过程也就是事件的传递过程,为什么呢?
因为这个过程依赖两个方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event ;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

这两个方法都带着UIEvent参数,那么其实就是这个事件通过这两个方法在视图层之间进行传递,直到找到最优的响应者。
那么事件的传递过程是从UIApplication到最优响应者

2.事件的响应

先说下,响应链是什么,我的理解是,响应链就是一堆响应者串一起的一个链
响应者之间的联系是通过nextResponder
事件的响应流程是从最顶层点击的视图到UIApplication
在事件的传递过程中,我们已经找到了最优的响应者,一般这个最优的响应者也是最顶层的视图;我们在确定了最优响应者的情况下,还得确定这个响应者能不能响应事件,所以才需要事件的响应这个流程,那么这个流程就是先找最顶层视图,看看可不可以响应这个事件- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event方法有没有会调用,如果这个视图没法响应这个事件,那么就会调用nextResponder方法,寻找下一个响应者,直到找到了可以响应事件的视图,最后完成了事件的响应过程

总结

事件响应过程分两步,事件的传递和事件的响应,事件是由UIApplication分发出来,开始往上层视图走,寻找响应者,通过这个过程找到响应者后;再进行事件的响应,来确定这个响应者可不可以响应事件,可以就给他响应了,不可以就沿着响应链nextResponder继续寻找可以响应事件的响应者,如果最后没人响应这个事件,那么也就是一直nextResponder到了UIApplication这一层,那这时候这个事件就会被上报给其Delegate,但前提下这个Delegate不属于 响应链 并且是UIResponder的子类

参考文章:
iOS UIKit框架学习—UIResponder
iOS-UIApplication详解
iOS编程中的快递小哥-Responder Chain(响应链)
iOS UIEvent 事件传递 流程
iOS-UITouch事件处理详解

相关文章

  • iOS 响应链

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

  • iOS响应者链

    iOS响应者链

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

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

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • tableView 与collectionView嵌套 coll

    这里就要说到 iOS 的响应链iOS 的所有点击方法 都是用响应链 传递到最底层的 所以可以截取响应链 让coll...

  • iOS中对于响应链的理解

    对于响应链的理解: 在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是...

  • 深入浅出iOS事件机制

    深入浅出iOS事件机制事件传递:响应链事件传递响应链

  • iOS响应者链

    参考好文 iOS开发-事件传递响应链,用运行时分析 iOS事件传递:响应者链[译] http://www.jian...

  • UIView 和 CALayer

    从iOS的响应链开始说起 最近在看iOS 的响应链 看到了这样的关系 因为UIView 继承自 UIRespond...

  • ios响应者链

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

网友评论

      本文标题:iOS响应链

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