美文网首页IOS开发
iOS事件传递与响应

iOS事件传递与响应

作者: zaq1125 | 来源:发表于2022-02-11 11:54 被阅读0次

在 UIKit 中我们使用响应者对象(Responder)接收和处理事件。一个响应者对象一般是 UIResponder 类的实例,它常见的子类包括 UIView,UIViewController 和 UIApplication,这意味着几乎所有我们日常使用的控件都是响应者,如 UIButton,UILabel 等等。

点击后,事件传递由Application->UIWindow->ViewController->View这样传递上来(事件传递是由父到子)
在这过程中,系统会去调用两个方法,如下

//事件传递的两个核心方法

//第一个方法返回一个UIView,是用来寻找哪一个视图来响应这个事件
- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;   // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system
//第二个方法是用来判断某一个点击的位置 是否在视图范围内,如果在就返回YES
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;   // default returns YES if point is in bounds

hitTest遍历寻找first responder 的规则:
1、调用pointInside来判断点击是否落在当前视图
2、如果pointInside返回NO,则hitTest:withEvent返回nil,查找其他同级的view
3、如果pointInside返回YES,则继续遍历subViews(最后添加的view优先被查找,FILO原则),向subView发送hitTest查找响应的view。
4、如果有子视图返回非空对象,那么hiTest:withEvent返回此对象,处理结束。(该子视图没有subview,否则应该继续遍历该子视图的subView)
5、如果全部的子视图都返回nil,则hitTest:withEvent返回自身(self)

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

image.png image.png

参考:
https://juejin.cn/post/6894518925514997767

相关文章

  • iOS 响应链

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

  • 深入浅出iOS事件机制

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

  • iOS 触摸事件与响应理解

    参考文章: iOS触摸事件的流动 iOS触摸事件的传递与响应 UIViewController UIAppli...

  • iOS响应者链

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

  • 初识iOS事情处理机制

    参考:史上最详细的iOS之事件的传递和响应机制-原理篇iOS触摸事件全家桶史上最详细的iOS之事件的传递和响应机制...

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

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

  • iOS之事件的传递和响应机制

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

  • iOS事件传递与响应

    触摸事件发生时,会递归调用hitTest:withEvent获得响应事件的试图,然后将触摸事件包装成UITouch...

  • iOS事件传递与响应

    在 UIKit 中我们使用响应者对象(Responder)接收和处理事件。一个响应者对象一般是 UIRespond...

  • iOS 中事件的响应链和传递链

    iOS 事件的主要由:响应连 和 传递链 构成。一般事件先通过传递链,传递下去。响应链,如果上层不能响应,那么一层...

网友评论

    本文标题:iOS事件传递与响应

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