百度地图整体封装大头针
admin
2023-07-31 05:00:16
0次

    版本迭代需要集成百度地图,产品需求是每个大头针上方都需要固定展示大头针先关的信息,而在集成过程中,如果通过百度原装方法点击大头针,弹出气泡,会出现如下几个问题:

    1.可以通过[mapView selectAnnotation:annotation animated:YES]方法在初始化时显示大头针气泡,但是从方法中很容易的看到,如果添加多个大头针,多个都需要初始化展示气泡,而它只能展示最后一个添加大头针的气泡,无法实现产品的需求

    2.点击大头针,弹出气泡,点击第二个时第一个大头针的气泡会消失,归结起来就是使用气泡的方式显示大头针相关信息只会显示一条,不能同时显示多条信息

    而针对产品的需求,需要显示多条大头针信息,百度地图sdk原装方法行不通,通过查阅相关资料,可以将大头针和气泡封装成一个整体,统一当成大头针使用,并取消点击大头针弹出气泡的方法,这样有一个小问题就是会出现大头针偏移的问题,需要用户根据需要自己调整大头针显示位置,设置偏移量;而如果需要点击大头针进行相关的操作,可以通过在大头针上方添加一个button,设定tag值绑定点击事件,下面是部分代码,可以参考:

  在百度地图的代理方法中创建封装大头针

- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation

{

    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {

        

        

        BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];

        

        

        newAnnotationView.backgroundColor = [UIColor clearColor];

        newAnnotationView.p_w_picpath = [UIImage p_w_picpathNamed:@"qiP.png"]; //设置大头针占位图片

        newAnnotationView.frame = CGRectMake(-70, -35, 140, 70);   //占位图片为空,需要强制设置大头针的范围

        newAnnotationView.userInteractionEnabled = YES;

        newAnnotationView.enabled = YES;

        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];

        //气泡view

        newAnnotationView.paopaoView = [[BMKActionPaopaoView alloc] initWithCustomView:view];

        UIImageView *paoPaoImage = [[UIImageView alloc]init];

        paoPaoImage.frame = CGRectMake(-45, -35, 140, 35);

        paoPaoImage.p_w_picpath = [UIImage p_w_picpathNamed:@"qiPao.png"];

        [newAnnotationView addSubview:paoPaoImage];

        //气泡view上大头针的信息    

        UILabel *busNameLabel = [[UILabel alloc]initWithFrame:CGRectMake(-35, -35, 50, 30)];

        busNameLabel.text =busNameStr;

        busNameLabel.textColor = [UIColor whiteColor];

        busNameLabel.backgroundColor = [UIColor clearColor];

        [newAnnotationView addSubview:busNameLabel];    

        UILabel *totalNumLab = [[UILabel alloc]initWithFrame:CGRectMake(25, -35, 70, 30)];

        totalNumLab.text = bustotalNum;

        totalNumLab.textAlignment = NSTextAlignmentCenter;

        totalNumLab.textColor = [UIColor colorWithRed:245.0/255 green:153.0/255 blue:38.0/255 alpha:1];

        totalNumLab.backgroundColor = [UIColor clearColor];

        [newAnnotationView addSubview:totalNumLab];

        UIImageView *schoolBusImage = [[UIImageView alloc]init];

        schoolBusImage.frame = CGRectMake(0, 0, 50, 50);

        schoolBusImage.p_w_picpath = [UIImage p_w_picpathNamed:@"schoolBus.png"];

        [newAnnotationView addSubview:schoolBusImage];

        //点击事件的button

        UIButton *backgroundBtn = [UIButton buttonWithType:UIButtonTypeCustom];

        backgroundBtn.frame = CGRectMake(-15, -10, 70, 70);

        backgroundBtn.tag = busTag;

        [newAnnotationView addSubview:backgroundBtn];

        [backgroundBtn addTarget:self action:@selector(backgroundBtnClick:) forControlEvents:UIControlEventTouchUpInside];

        return newAnnotationView;

        

    }

    return nil;

}

    创建大头针,并设置大头针的数据,必须依次添加大头针到地图上,不能整体添加

for (int i = 0; i < self.schoolLeaderArr.count; i++) {

                        

                        double schoolBusLatitude = [self.schoolLeaderArr[i][@"latitude"] doubleValue];

                        double schoolBusLongitude = [self.schoolLeaderArr[i][@"longitude"] doubleValue];

                        schoolBusLocation = CLLocationCoordinate2DMake(schoolBusLatitude, schoolBusLongitude);

                        schoolBusAnnotation = [[BMKPointAnnotation alloc]init];

                        schoolBusAnnotation.coordinate = schoolBusLocation;

                        busNameStr = [NSString stringWithFormat:@"%@",self.schoolLeaderArr[i][@"busName"]];

                        bustotalNum = [NSString stringWithFormat:@"%@/%@人",[NSString stringWithFormat:@"%@",self.schoolLeaderArr[i][@"upNum"]],[NSString stringWithFormat:@"%@",self.schoolLeaderArr[i][@"totalNum"]]];

                        busTag = [self.schoolLeaderArr[i][@"busId"] intValue];

                        [self.annotationArr addObject:schoolBusAnnotation];

                        //创建一个大头针,添加一个,防止统一添加代理方法里面数据混乱

                        [self.mapView addAnnotation:schoolBusAnnotation];

                    }

  

 

     

附件:http://down.51cto.com/data/2366532

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...