iOS hit-Testing

来源:互联网 发布:现代启示录 知乎 编辑:程序博客网 时间:2024/06/05 12:05

UIView中提供两个方法用来确定hit-testing View


hitTest:withEvent:方法的处理流程:

先调用pointInside:withEvent:判断触摸点是否在当前视图内;

如果返回YES,

该视图的所有子视图调用hitTest:withEvent,调用顺序由层级低到高依次调用。

如果返回NO,

hitTest:withEvent返回nil,该视图的所有子视图的分支全部被忽略。




备注:

如果View的同级别Subview中有重叠的部分,则优先检查顶部的Subview,如果顶部的Subview返回nil, 再检查底部的Subview

如果点击没有发生在某View中,那么该事件就不可能发生在View的Subview中,如果你的Subview设置了clipsToBounds=NO,实际显示区域可能超出了superView的frame,你点击超出的部分,是不会处理你的事件的。


以下情况导致自身和其所有子视图不能被hit-testing发现,无法响应触摸事件:

1.隐藏(hidden=YES)的视图

2.禁止用户操作(userInteractionEnabled=NO)的视图

3.alpha<0.01的视图

4.视图超出父视图的区域



0 0
原创粉丝点击