百度地图整体封装大头针
2017-03-23 08:41
176 查看
版本迭代需要集成百度地图,产品需求是每个大头针上方都需要固定展示大头针先关的信息,而在集成过程中,如果通过百度原装方法点击大头针,弹出气泡,会出现如下几个问题:
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.image = [UIImage imageNamed:@"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.image = [UIImage imageNamed:@"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.image = [UIImage imageNamed:@"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.可以通过[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.image = [UIImage imageNamed:@"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.image = [UIImage imageNamed:@"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.image = [UIImage imageNamed:@"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
相关文章推荐
- iOS 百度地图大头针使用
- iOS 百度地图自定义大头针。
- 百度地图添加多个大头针自定义图片
- iOS 【关于百度地图大头针标记 选中状态/点击状态 的区别及处理办法】
- 百度地图 大头针设置本地图片与网络图片
- 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
- Android Activity整体管理和关闭工具类封装
- IOS 百度地图开发 大头针标数字 大头针(标注)以及折线的基本使用
- 百度地图检索周围小吃添加大头针
- 封装一个类:软键盘弹出,将控件整体顶上去
- 个性化WinPE封装方法《第一讲----整体思路》
- 04 将当前位置用大头针标注到百度地图上
- 百度地图点击大头针在弹出的气泡上加按钮
- C++线程封装JAVA线程操作 整体架构类图
- 04 将当前位置用大头针标注到百度地图上
- iOS 版百度地图 SDK 满视口显示一组大头针
- iOS 百度地图_自定义Annotation大头针_修改大头针图片
- iOS第三方地图-百度地图定位的封装
- iOS11调用百度地图出现自定义 大头针不显示的问题
- 百度地图使用(二)自定义大头针和弹出气泡