iOS 响应链与传递链

传递链

从最底层UIWindow 到UIView

UIView有两个方法:
pointInside:withEvent:判断点击的点是否在当前UIView上,是返回YES 否则返回NO
hitTest:withEvent: 如果point不在当前的UIview上返回nil 否则继续遍历其子视图(额外条件hidden!=YES userInteractionEnabled!=NO alpha!=0)

响应链

从最上层的UIView到最底层的UIWindow

同样可以通过touchesBegan: withEvent:方法来截获并决定是否向下传递
view.nextResponer可以获取view的下一响应者

手势与touch

1、手势和pointInside一级hitTest必须得先找到View,然后才能触发手势;
2、第一步找到的view,那么view和它的superView的手势都能响应
3、手势的底层实际是根据view的touch的四个方法实现的
4、有时我们添加了手势后不再关心touch的调用,那么可以通过delayTouchBegin、cancelTouchInView两个属性来决定touch方法的调用时机甚至是取消touch的方法调用

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

推荐阅读更多精彩内容

  • 重点参考链接: View Programming Guide for iOS https://developer....
    Kevin_Junbaozi阅读 4,574评论 0 15
  • 前言: 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vi...
    reviewThis阅读 752评论 1 2
  • 前言 按照时间顺序,事件的生命周期是这样的: 事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的vie...
    欢博阅读 608评论 0 3
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 58,402评论 51 604
  • 一、背景 ECMAScript使用SetFunctionName,给函数添加name属性。 SetFunction...
    何幻阅读 1,074评论 0 0