谁才是最终响应者

栏目: IOS · 发布时间: 5年前

内容简介:当用户触摸屏幕时会产生若干个

1.基本概念:

  • UIEvent :当用户触摸屏幕时, UIKit 会将这一操作封装成一个个的 UIEvent 对象,该对象包含着一些处理事件所需要的信息
  • 响应者:在 UIKit 中,所有直接或者间接继承 UIResponder 类的都具有响应事件的能力(例如: UIApplicationUIViewUIViewController 和我们自定义的视图以及视图控制器),这些对象通常都被称为响应对象(也称为响应者,hit-testview)
  • 响应链:在一个App中,所有视图是按照树状结构进行组织的,除了根视图外,每个视图都有一个父视图,而每个视图都可以有0个或者多个子视图,而在这个树状结构构建的同时,也构建了一条条的事件响应链

当用户触摸屏幕时会产生若干个 UIEvent 对象, UIKit 会把 UIEvent 对象放到事件队列中,当需要处理事件的时候, UIApplication 会从事件队列头部取出一个 UIEvent 对象进行分发,找到可以处理该事件的响应者

2.寻找最终响应者过程

当手指触摸屏幕的时候,UIApplication通过从事件队列头中取出一个事件对象分发给UIWindow,
然后每一个视图通过调用hitTest:withEvent和pointInside:withEvent方法,
如pointInside:withEvent方法返回YES,则继续遍历该视图上的所有子视图,
直到找到最终响应视图,然后hitTest:withEvent方法逐级返回最终响应视图,
找到最终响应视图之后则会尝试让其处理这个事件,如果无法处理该事件,
则事件会被传递给下一个事件处理者,直到传递到AppDelegate,则事件会被丢弃。-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
/**当满足以下条件,返回视图层级中能响应触控点的最佳视图
   self.hidden == NO;
 self.userInteractionEnabled = YES;
 self.alpha > 0.01;事件的触摸点在视图的bounds内
 */复制代码

3.手势识别器

谁才是最终响应者

当我给 pupleView 重写了 touchsBegan:withEvent、touchsEnded:withEvent、 touchsMoved:withEvent、touchsCancelled:withEvent 方法,并且给 pupleView 添加了 UIGestureRecognize r并点击,控制台打印的结果如下:

控制台打印的结果如下:
XLPupleView touchesBegan
XLPupleView touchesMoved
handle Tap复制代码
说明:在识别一个触摸事件的时候,如果该视图有添加手势识别器,则手势识别器拥有更高优先级,优先处理事件。
其会先调用touchsBegan:withEvent、touchsMoved:withEvent方法和手势识别器对应响应方法,只有手势
识别失败了,才会触发响应链中的touchsEnded:withEvent方法,如果识别成功,则会触发touchsCancelled:withEvent
取消响应者链对触摸事件的响应。
也可以设置手势识别器中的cancelsTouchesInView属性,该属性默认为YES。
当设置为NO时,手势识别器识别到触摸事件之后不会发送touchesCancelled:withEvent取消响应链对触摸事件的响应,
这个时候手势识别器和hit-testview均响应触摸事件。复制代码

Demo下载地址: github.com/hlc0000/Res…

今天就总结到这里了,希望各位小伙伴多多提出宝贵意见,交流学习~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习及其应用2007

机器学习及其应用2007

周志华 编 / 清华大学 / 2007-10 / 37.00元

机器学习是人工智能的一个核心研究领域,也是近年来计算机科学中最活跃的研究分支之一。目前,机器学习技术不仅在计算机科学的众多领域中大显身手,还成为一些交叉学科的重要支撑技术。本书邀请相关领域的专家撰文,以综述的形式介绍机器学习中一些领域的研究进展。全书共分13章,内容涉及高维数据降维、特征选择、支持向量机、聚类、强化学习、半监督学习、复杂网络、异构数据、商空间、距离度量以及机器学习在自然语言处理中的......一起来看看 《机器学习及其应用2007》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具