美文网首页响应者 事件传递 导航条 tabbar iOS开发文档
iOS 事件传递 hitTest方法与PointInside方法

iOS 事件传递 hitTest方法与PointInside方法

作者: iOS小王子 | 来源:发表于2015-12-11 10:07 被阅读2948次

    作用:寻找最适合的View

    参数:当前手指所在的点.产生的事件

    返回值:返回谁,谁就是最适合的View.

    什么时候用调用:只要一个事件,传递给一个控件时,就会调用这个控件的hitTest方法

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

    作用:判断point在不在方法调用者上

    point:必须是方法调用者的坐标系

    什么时候调用:hitTest方法底层会调用这个方法,判断点在不在控件上.

    -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{

    return YES;

    }

    hitTest底层实现:

    1.判断当前能不能接收事件

    if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01)

    returnnil;

    2.判断触摸点在不在当前的控件上

    if(![self pointInside:point withEvent:event]) return nil;

    3.从后往前遍历自己的子控件

    int count = (int)self.subviews.count;

    for (int i = count - 1; i >= 0;i-- ) {

    UIView *childV = self.subviews[i];

    把当前坐标系上的点转换成子控件坐标系上的点.

    CGPoint childP =[self convertPoint:point toView:childV];

    判断自己的子控件是不是最适合的View

    UIView *fitView =[childV hitTest:childP withEvent:event];

    如果子控件是最适拿的View,直接返回

    if (fitView) {

    returnfitView;

    }

    }

    4.自己就是最适合的View

    return self.

    相关文章

      网友评论

        本文标题:iOS 事件传递 hitTest方法与PointInside方法

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