• 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) {

    //

    //            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;

    }

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

  • 相关阅读:
    5-3:Spring整合Kafka
    关于 SAP UI5 getSAPLogonLanguage is not a function 的错误消息以及 API 版本的讨论
    Mybatis | Mybatis 一级缓存、二级缓存、三级自定义缓存(Redis)
    Day12 | 每天五道题
    Linux之selinux详解
    Kaggle Feedback Prize 3比赛总结:如何高效使用hidden states输出(1)
    算法思想总结
    windows docker 部署 rocketmq
    70.Qt QWaitCondition多线程同步介绍及案例分析
    VS_QT_5_Qt信号和槽
  • 原文地址:https://blog.csdn.net/ios_xumin/article/details/126307287