美文网首页
hitTest 2022-01-09

hitTest 2022-01-09

作者: iOS打怪升级 | 来源:发表于2022-01-09 14:54 被阅读0次
原理大概这样子
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
     NSLog(@"%@,%s",self.class,__func__);
    //自身不能接受触摸,返回空
    //对于继承自UIControl的控件,还需要判断enable的值
    if (!self.userInteractionEnabled || self.hidden || self.alpha < 0.01 ) {
        return nil;
    }
    //触摸点不在自身区域内,返回空,不再遍历子视图
    if (![self pointInside:point withEvent:event]) {
        return nil;
    }

 //从后往前遍历子视图
    NSArray *subView = self.subviews;
    __block UIView * view = nil;
    [subView enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(UIView  * obj, NSUInteger idx, BOOL * _Nonnull stop) {
        CGPoint subPoint = [self convertPoint:point toView:obj];
         view = [obj hitTest:subPoint withEvent:event];
        if (view) {
            *stop = YES;
        }
    }];
    //找到合适的子视图
    if (view) {
        return view;
    }
//没有找到合适的子视图,返回本身
    return self;
//    return [super hitTest:point withEvent:event];
}

相关文章

网友评论

      本文标题:hitTest 2022-01-09

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