MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)

很多项目需求需要实现自定义大头针和自定义的CalloutAnnotationView,这篇文章或许对很多需要的童鞋有帮助!先看看我做的效果图


MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)_第1张图片
D05E6206-A050-48BC-B14B-13603BE3884C.png

这里面的大头针和CalloutAnnotationView都是和系统的不一样,应该能够应付大部分的场景,废话不多说进入正题。

首先童靴要先清楚这个MKAnnotation和MKAnnotationView两者之间的关系,如果这个没弄明白那就很难理解。我说说自己的理解--就是model和view的关系,大家可以试着琢磨下应该不能理解。上面的效果图中不管是橙色的红色的 还是弹出的不规则图形其实都是大头针,大家在使用苹果系统的地图时候都知道 大头针有点击事件的.第二要把MKMapView当做平时经常做的UITableView理解和使用。第三就是自己动手。

先看看 第一层大头针及上图中红色 蓝色包括文字的大头针.这些地图的数据应该都是服务器获取的,则建立一个model接收这些数据 我这里定义了一个Location模型接收数据


MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)_第2张图片
Paste_Image.png

现在数据有了 那么就得和大头针联系起来了.怎么联系呢?这里先不说,我们先来看看两个函数的意义,

WechatIMG1.jpeg
WechatIMG2.jpeg

上面我就说了 要把自定义大头针的使用和UITableView来理解,那么不难理解 上面第一个函数对应的就是
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath\ *)indexPath
第二个函数就不用我说了 点击事件。既然现在能够明白点了那就进入正题,我们既然可以把大头针当自定义cell来使用,那它肯定是可以重复用的,这个可以看下官方的API文档里面写的很清楚,那我们来显示第一层的自定义大头针。
上面的模型我们已经有了,现在就得和MKAnnotation产生关联,既然是自定义那么肯定要创建一个继承MKAnnotation的类 (原生的MKAnnotation只有三个属性给你调用肯定无法满足实际的项目需求)

MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)_第3张图片
WechatIMG3.jpeg

.m文件里面 直接set方法让模型和这个ZLocationAnnotation赋值,代码就懒得附上了。
通过上面截图的两个方法 我们应该也看的出来 最终用户看到了肯定是MKAnnotationView,前面也说了MKAnnotation和MKAnnotationView就是model和view的关系,现在model已经有了,那就需要和MKAnnotationView进行关联。我这里是一个简单自定义View通过xib拖线。为什么我不直接自定义继承MKAnnotationView的view呢?很简单,没有可以直接拖出一个MKAnnotationView啊,这里提供下自定义View加载xib的方法是
[[[NSBundle mainBundle] loadNibNamed:@"xib名" owner:nil options:nil] lastObject];

MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)_第4张图片
WechatIMG4.jpeg

好 现在界面也已经搭建了 刚刚说了xcode没办法直接拖出一个MKAnnotationView,那只能让刚刚自定义view 和MKAnnotationView产生关联,那我们就得创建一个继承MKAnnotationView的view,我这里是这么定义的


WechatIMG5.jpeg

要显示刚刚xib自定义的View 就在初始化方法里面加进去就可以了。这里要注意一点,可能很多童靴遇到这个问题 点击自定义的大头针没效果,有的重写hit方法,我采取第二种方法:

MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)_第5张图片
WechatIMG6.jpeg

大家可以看到 我将MKAnnotationView的bounds设置成和自定义的大头针的View一样大小,为什么很多童靴遇到大头针点击无效呢?就是因为它的可点击范围比较小,后面的两个方法就是简单的初始化赋值操作。在配合刚刚说的显示MKAnnotationView的代理方法 当然 你得要调用 加载方法 addAnnotation才行。


MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一)_第6张图片
WechatIMG7.jpeg

到此,你的自定义大头针显示是没有问题了,至于自定义CalloutAnnotationView我下一集讲。
谢谢!

你可能感兴趣的:(MKMapView高德地图使用--自定义大头针、CalloutAnnotationView(一))