HITEST使用扩大点击区域 超出父视图响应点击事件

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

其他先相关博客:

https://blog.csdn.net/imkata/article/details/78767285

https://blog.csdn.net/j_akill/article/details/46888311

猜你喜欢

转载自blog.csdn.net/yst19910702/article/details/81873157