IOS 集成百度地图 自定义显示标签 点击事件不响应

本文介绍如何在百度地图iOS SDK中实现自定义标记视图,并解决自定义标记视图中的按钮及手势事件响应问题。通过重写hitTest方法,确保在地图上显示的自定义标记能够正确响应触摸事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.集成百度地图时需要在地图上显示多个地点的自定义标签,popView满足不了需求,一次只能出现选中的一个,我们需要自定义标签。

2.自定义View继承自BMKPinAnnotationView,可以显示多个自定义的view,但发现view中的按钮以及手势事件都没效果不响应。应该是百度地图的BMKPinAnnotationView重写了hitTest方法导致不响应,自己可以测试。解决方法在自己自定义view中重写hitTest方法

//在自定义view上添加事件拦截

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

{

    

    NSLog(@"hitTest=======================");

//     touch point是在_btn上,则hitTest返回_btn

    //1.获取这个点击位置转换按钮上的位置

    CGPoint btnPointInA = [arrowImageBtnconvertPoint:pointfromView:self];

    //2.判断这个转换后的位置是不是在这个按钮里  在这个按钮里返回这个按钮事件 hitTest和pointInside一般成对出现  hitTest方法由于会递归调用,有多少个子View调用多少次,所以这个方法里尽量不要写太复杂逻辑,以免处理不当效率低

    if ([arrowImageBtnpointInside:btnPointInAwithEvent:event])

    {

        NSLog(@"button=======================");

        returnarrowImageBtn;

    }

//     否则,返回默认处理

    return [superhitTest:pointwithEvent:event];

    

}


3.重写hitTest方法一些高级事件的处理,直接返回高级控件如(webview和mapview),这些控件是不会响应的,判断在这些高级控件的区域内返回

[super hitTest:point withEvent:event]; 才能响应事件。

//地图显示  响应区域在图片范围内的处理

    if (CGRectContainsPoint(mapView.frame, point)) {

        //mapview在业务视图后面的时候  响应区域在业务区域的时候  venusView去处理

        if (!CGRectContainsPoint(CGRectMake(0, 100, 320, 380), point)&&routeSearch.isShowBack) {

//            NSLog(@"LBLog 地图在显示  应该业务区域响应");

            venusView.userInteractionEnabled=YES;

            return venusView;

        }

        //1.地图区域响应  让上面的venusView不接受响应事件 不处理 在他响应区域内的时候在设置成YES 响应事件

        venusView.userInteractionEnabled=NO;

        //2.不能直接返回mapview(类似高级控件)  调用继承方法去处理复杂的view

        return [super hitTest:point withEvent:event];

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值