美文网首页
定制hitTest:withEvent:方法

定制hitTest:withEvent:方法

作者: 6灰太狼9 | 来源:发表于2017-03-30 11:32 被阅读18次

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

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

    若返回NO,则hitTest:withEvent:返回nil;

    若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;

    若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;

    如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。

    hitTest:withEvent:方法忽略隐藏(hidden=YES)的视图,禁止用户操作(userInteractionEnabled=NO)的视图,以及alpha级别小于0.01(alpha<0.01)的视图。

    例子

    1.在此例子中button,scrollview同为topView的子视图,但scrollview覆盖在button之上,这样在button上的触摸操作返回的hit-test view为scrollview,button无法响应,可以修改topView的hitTest:withEvent:方法如下:

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    UIView *result = [super hitTest:point withEvent:event];

    CGPoint buttonPoint = [underButton convertPoint:point fromView:self];

    if ([underButton pointInside:buttonPoint withEvent:event]) {

    return underButton;

    }

    return result;

    }

    这样如果触摸点在button的范围内,返回hittestView为button,从button按钮可以响应点击事件。

    2.下图解决  点击导航栏下方也会触发导航栏按钮的点击事件

    相关文章

      网友评论

          本文标题:定制hitTest:withEvent:方法

          本文链接:https://www.haomeiwen.com/subject/ztbuottx.html