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的方法调用

你可能感兴趣的:(iOS 响应链与传递链)