百度地图整体封装大头针
版本迭代需要集成百度地图,产品需求是每个大头针上方都需要固定展示大头针先关的信息,而在集成过程中,如果通过百度原装方法点击大头针,弹出气泡,会出现如下几个问题:
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= [UIColorclearColor];
newAnnotationView.p_w_picpath= [UIImagep_w_picpathNamed:@"qiP.png"]; //设置大头针占位图片
newAnnotationView.frame=CGRectMake(-70, -35,140,70); //占位图片为空,需要强制设置大头针的范围
newAnnotationView.userInteractionEnabled=YES;
newAnnotationView.enabled=YES;
UIView*view = [[UIViewalloc]initWithFrame:CGRectMake(0,0,0,0)];
//气泡view
newAnnotationView.paopaoView= [[BMKActionPaopaoViewalloc]initWithCustomView:view];
UIImageView*paoPaoImage = [[UIImageViewalloc]init];
paoPaoImage.frame=CGRectMake(-45, -35,140,35);
paoPaoImage.p_w_picpath= [UIImagep_w_picpathNamed:@"qiPao.png"];
[newAnnotationViewaddSubview:paoPaoImage];
//气泡view上大头针的信息
UILabel*busNameLabel = [[UILabelalloc]initWithFrame:CGRectMake(-35, -35,50,30)];
busNameLabel.text=busNameStr;
busNameLabel.textColor= [UIColorwhiteColor];
busNameLabel.backgroundColor= [UIColorclearColor];
[newAnnotationViewaddSubview:busNameLabel];
UILabel*totalNumLab = [[UILabelalloc]initWithFrame:CGRectMake(25, -35,70,30)];
totalNumLab.text=bustotalNum;
totalNumLab.textAlignment=NSTextAlignmentCenter;
totalNumLab.textColor= [UIColorcolorWithRed:245.0/255green:153.0/255blue:38.0/255alpha:1];
totalNumLab.backgroundColor= [UIColorclearColor];
[newAnnotationViewaddSubview:totalNumLab];
UIImageView*schoolBusImage = [[UIImageViewalloc]init];
schoolBusImage.frame=CGRectMake(0,0,50,50);
schoolBusImage.p_w_picpath= [UIImagep_w_picpathNamed:@"schoolBus.png"];
[newAnnotationViewaddSubview: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:@"%@/%@人",[NSStringstringWithFormat:@"%@",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
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。