hitTest的基本用法

场景:在原有更新弹框 下面加个关闭按钮,只能点击关闭去掉弹框,不是点击屏幕黑屏自由落下;

由于关闭按钮在父视图外面,又得接受事件,只能把父类自定义继承于UIView,重写hittest方法,目的是返回点击的视图

遇到的问题是:1,必须通过 UIButton *btn = (UIButton *)[self findView:subView withPoint:point withEvent:event];  找到对应的btn,并且根据宽度区分另外的 

2,关闭按钮不能在控制器的外面,这样重写hittest也不会反应到,坑了n久;

所以修改sb,把控制器里面自定义视图YFHitTestVIews底部提高80像素;让关闭按钮出现在控制器里面,但实际关闭按钮还在他的父视图YFHitTestVIews 外面。

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

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

        UIView *view = [self findView:self withPoint:point withEvent:event];

//        if (view) {

扫描二维码关注公众号,回复: 17273215 查看本文章

//

//            return view;

//        }

    if ([view  isKindOfClass:[UIButton class]]) {

        [[NSNotificationCenter defaultCenter] postNotificationName:@"YFVersionsUpdateViewController" object:nil ];

        return view;

    }

    return result;

}

- (UIView *)findView:(UIView *)view withPoint:(CGPoint)point withEvent:(UIEvent *)event

{

//    DLog(@"进来了");

    if ([view isKindOfClass:[UIButton class]]) {

        return view;

    }

    for (UIView *subView in view.subviews) {

        UIButton *btn = (UIButton *)[self findView:subView withPoint:point withEvent:event];

        if(btn.size.width<100){

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

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

                return btn;

            }

        }

       

//        if ([subView isKindOfClass:[UIButton class]]) {

//            return subView;

//            break;

//        }

    }

    return nil;

}

好久不玩这玩意了,差点忘了,以为父视图重写个方法就行了,半天捕获不到事件,可以在视图的外面,但是不能再控制器的外面!

猜你喜欢

转载自blog.csdn.net/ios_xumin/article/details/126307287