美文网首页
UIView hitTest

UIView hitTest

作者: 啷里个啷里个啷个里个啷 | 来源:发表于2016-10-28 10:36 被阅读0次

    对于UIView 的两个方法的讲解:

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

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

    网上对这两个方法的讲解很多,但是大部分是纯文字的描述,我不再赘述,需要可以自己百度“UIView hitTest”等等。

    我现在根据我的理解,把这两个方法的源码实现模拟出来。

    注意:这里只是模拟,是为了让你更容易理解而已,距离真实的源码还有很大的差距,

    比如里面的event我根本没用到。

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

    UIView *touchView = self;

    if ([self pointInside:point withEvent:event]) {

    for (UIView *subView in self.subviews) {

    //注意,这里有坐标转换,将point点转换到subview中,好好理解下

    CGPoint subPoint = CGPointMake(point.x - subView.frame.origin.x,

    point.y - subView.frame.origin.y);

    UIView *subTouchView = [subView hitTest:subPoint withEvent:event];

    if (subTouchView) {

    //找到touch事件对应的view,停止遍历

    touchView = subTouchView;

    break;

    }

    }

    }else{

    //此点不在该View中,那么连遍历也省了,直接返回nil

    touchView = nil;

    }

    return touchView;

    }

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

    return CGRectContainsPoint(self.bounds, point);

    }

    相关文章

      网友评论

          本文标题:UIView hitTest

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