美文网首页iOS技术
UIView响应链及事件穿透

UIView响应链及事件穿透

作者: 独孤流 | 来源:发表于2019-09-24 14:05 被阅读0次

参考:
iOS触摸事件全家桶
史上最详细的iOS之事件的传递和响应机制-原理篇

1、同一层级,让上面的一层不响应,让被盖住的地方响应,常见的场景是引导图高亮的地方点击让底部响应

BoxA 包含 subB,subC,subB在subC的上面,想点击subB时让下面的subC响应
重写在上面的subB

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView *hitView = [super hitTest:point withEvent:event];
    // 如果点击
    if(判断点击的地方如果是需要不影响的地方){
        // 表示让
        return nil;
    }
    return hitView;
}

2、容器的字内容超出了容器的frame也要让响应
重写容器View的如下方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *view = [super hitTest:point withEvent:event];
    if (view == nil) {
      // 如果点击区域不再容器中,继续判断容器的子内容是否在容器中
        for (UIView *subView in self.subviews) {
            CGPoint tp = [subView convertPoint:point fromView:self];
            if (CGRectContainsPoint(subView.bounds, tp)) {
                view = subView;
            }
        }
    }
    return view;
}

相关文章

网友评论

    本文标题:UIView响应链及事件穿透

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