版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yst19910702/article/details/81873157
点击屏幕或者点击一个btn会发生什么? 传递链 响应者链。
在响应连中在找到最合适的响应者需要经过以下两个方法:
这两个方法的作用:寻找最适合的View
1.hitTest方法
参数:当前手指所在的点和产生的事件
返回值:返回谁, 谁就是最适合的View.
什么时候用调用:只要一个事件,传递给一个控件时, 就会调用这个控件的hitTest方法
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
2.pointInside方法
作用:判断point在不在方法调用者上
point:必须是方法调用者的坐标系
什么时候调用:hitTest方法底层会调用这个方法,判断点在不在控件上.
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
return YES;
}
如果子控件不在父视图部分则返回NO,无法响应事件。
if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01)
//隐藏 关闭交互 透明度小于 0.01 不响应事件。但是通过hitest让其返回yes可以响应事件 详见demo;
return nil;
hitTest可以扩大空间的热区和让点击事件透过到下一层;
这个一般在需要扩大控件或视图点击区域 或者 当子控件超出父视图 需要子控件响应点击事件时使用。
demo中包含扩大点击区域和超出父视图部分响应事件:
demo:https://github.com/YST521/Hittest.git
其他先相关博客: