谁才是最终响应者

栏目: 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…

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


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

查看所有标签

猜你喜欢:

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

算法心得:高效算法的奥秘(原书第2版)

算法心得:高效算法的奥秘(原书第2版)

(美)Henry S. Warren, Jr. / 爱飞翔 / 机械工业出版社 / 2014-3 / 89.00

【编辑推荐】 由在IBM工作50余年的资深计算机专家撰写,Amazon全五星评价,算法领域最有影响力的著作之一 Google公司首席架构师、Jolt大奖得主Hoshua Bloch和Emacs合作创始人、C语言畅销书作者Guy Steele倾情推荐 算法的艺术和数学的智慧在本书中得到了完美体现,书中总结了大量高效、优雅和奇妙的算法,并从数学角度剖析了其背后的原理 【读者评价......一起来看看 《算法心得:高效算法的奥秘(原书第2版)》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具