ios百度地图开发之显示标注

demo 地址

MyAnnotation.h文件

#import <Foundation/Foundation.h>
#import <BaiduMapAPI_Map/BMKPointAnnotation.h>
@interface MyAnnotation : BMKPointAnnotation
/** 
 * 图标 
 */
@property (nonatomic, copy) NSString *icon;
@end

MyAnnotation.m文件

#import "MyAnnotation.h"
@implementation MyAnnotation

@end

MyAnnotationView.h文件

#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Map/BMKAnnotationView.h>
@interface MyAnnotationView : BMKAnnotationView
/**
 * 创建方法 
 *
 *  @param mapView 地图
 *
 *  @return 大头针 
*/
+ (instancetype)annotationViewWithMap:(BMKMapView *)mapView;
@end

MyAnnotationView.m文件

#import "MyAnnotationView.h"
#import "MyAnnotation.h"@implementation MyAnnotationView
- (instancetype)initWithAnnotation:(id<BMKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier{ 
  if (self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) { 
  }
  return self;
}
+ (instancetype)annotationViewWithMap:(BMKMapView *)mapView{ 
  static NSString *identifier = @"anno"; 
  // 从缓存池中取 MyAnnotationView *annoView = (HXAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 
  // 如果缓存池中没有, 创建一个新的 
  if (annoView == nil) { 
    annoView = [[MyAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:identifier]; 
  } 
  return annoView;
}
- (void)setAnnotation:(MyAnnotation *)annotation{ 
  [super setAnnotation:annotation]; 
  //设置图标 
  self.image = [UIImage imageNamed:@"icon_green"];
}
@end

之后在控制器文件中,首先要先从服务器获取数据,取到数据后,根据经纬度坐标,也就是一个个的Annotation显示到地图上.

//可以使用,anno是标注
[_mapView addAnnotation:_mapView.annotations];
//或者使用,annos是标注数组
[_mapView addAnnotations:_mapView.annotations];

之后在调用BMKMapViewDelegate的方法:

#pragma mark -BMKMapViewDelegate
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation{ 
    // 对用户当前的位置的大头针特殊处理 
    if ([annotation isKindOfClass:[HXAnnotation class]] == NO) {
    return nil;
 }
  // 创建大头针 
  MyAnnotationView *annoView = [MyAnnotationView annotationViewWithMap:mapView]; 
  // 设置模型 
  annoView.annotation = annotation; 
  self.anno = annotation; 
  //初始化泡泡视图 
  DetailsView *detailView = [[[NSBundle mainBundle]loadNibNamed:@"HXDetailsView" owner:nil options:nil] lastObject]; 
  //显示到paopaoView上 
  annoView.paopaoView = [[BMKActionPaopaoView alloc] initWithCustomView:detailView]; 
  // 返回大头针
  return annoView;
}

才能将annoView显示到地图上. 如果是自定义的paopaoView,BMKMapViewDelegate会有如下方法:

-(void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)

我在开发过程中,调用上面的方法并没有作用,所以我在自定义的paopaoView里添加了一个按钮,盖满整个paopaoView,之后添加一个按钮的点击事件,以此来响应泡泡的点击,但是如果有很多的标注,需要最点击的泡泡遍历,否则则不能知道点击的是哪个泡泡. 我根据从服务器获取的数据,服务器返回了有关标注的ID,把这个ID设置为paopaoView上按钮的tag值,然后根据按钮tag值来判断点击的是哪个paopaoView.如下代码:

#pragma mark paopao按钮点击
- (void)detailBtnClick:(UIButton *)button{
 //self.annotations是标注数组
 for (int i = 0; i < self.annotations.count; i++) {
   HXMenDList *menDList = self.annotations[i];
   if (button.tag == [menDList.shopId integerValue]) {
   HXDetailsController *detailsV = [[HXDetailsController alloc] init];
 detailsV.menDList = menDList;
   detailsV.coordinate = self.userLocation.location.coordinate;
   [self.navigationController pushViewController:detailsV animated:YES];
   }
 }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python爬虫日记

python3下搜狗AI API实现

a、搜狗也发布了自己的人工智能 api,包括身份证ocr、名片ocr、文本翻译等API,初试感觉准确率一般般。

1833
来自专栏Charlie's Road

Container ViewController自定义转场控制器。

最近接触到新公司的老项目改版。自从来了之后一直在忙另一个项目,也没有看老项目的实现逻辑。 看到设计稿的时候,并不是普通的树形标签导航的样子。大致效果如FaceU...

1261
来自专栏大内老A

扩展UltraGrid控件实现对所有数据行的全选功能[Source Code下载]

在前面一篇文章中,我通过对三种Infragistics 控件(UltraToolBarManager、UltraGird和UltraListView)进行扩展,...

27810
来自专栏技术总结

MJRefresh源码剖析与学习

建议查看原文:https://www.jianshu.com/p/23c876f8ae39(不定时更新)

2294
来自专栏青玉伏案

iOS开发之自定义表情键盘(组件封装与自动布局)

  下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,Cor...

25510
来自专栏移动开发

一个简单的ReactNative demo

本人非前端,请轻喷 ReactNative版本:0.31 github:https://github.com/X-FAN/reactnativelear...

4473
来自专栏程序员互动联盟

Android Metro风格的Launcher开发系列第二篇

前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客 Android Metro...

3766
来自专栏非著名程序员

基础篇章:关于 React Native 之 Navigator 组件的讲解

(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) 今天我们来讲讲Navigator这个小家伙,...

1947
来自专栏祝威廉

Spark 2.3.0 如何处理图片以及存在的一些问题

因为需要在MLSQL里开发一个图片处理模块(以及配套数据源),使用上大概是这样子的:

962
来自专栏葡萄城控件技术团队

VS2010 Extension实践(1)

最近VS2010 Extension在Visual Studio Blog(http://blogs.msdn.com/visualstudio/)上提得很频繁...

2089

扫码关注云+社区

领取腾讯云代金券