免费开源的iOS开发学习平台

MapKit框架:3-简易地图标注

当我们在地图上搜索某个地址时,搜索结果会以一个“大头针”的样式插在地图上,这些“大头针”就是地图上的标注。“大头针”不仅可以显示某个地址在地图中的位置,同时还可以显示该地址的一些附加信息,例如,在外卖应用中,可以标注商家的名称以及联系方式等。

MKAnnotaiton协议

在地图上展示的标注,都必须遵守MKAnnotaiton协议。在该协议中,可以获取地图标注的属性。

  • 获取标注的经纬度信息。
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
  • 获取标注的标题信息
@property (nonatomic, readonly, copy, nullable) NSString *title;
@property (nonatomic, readonly, copy, nullable) NSString *subtitle;

MKPointAnnotation类

MKPointAnnotation类是在MapKit框架中系统定义的标注类,该类继承自MKShape类,由于MKShape类遵守MKAnnotaiton协议,因此,作为MKShape类的子类,MKPointAnnotation类也遵守MKAnnotaiton协议。MKPointAnnotation类的标注样式是由系统提供的,即一个红头的大头针样式的标注,也是我们最常见的样式。创建MKPointAnnotation对象后,我们需要给其设置经纬度信息(coordinate)。

@interface MKPointAnnotation : MKShape
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end

而MKShape类中,提供了可以设置地图标注标题的属性。

@interface MKShape : NSObject <MKAnnotation>
@property (nonatomic, copy, nullable) NSString *title;
@property (nonatomic, copy, nullable) NSString *subtitle;
@end

结合前面的介绍,有如下两种方式可以创建地图标注对象:

  1. 创建MKPointAnnotation类的对象,其父类遵守了MKAnnotaiton协议;
  2. 创建一个自定义类,设置该类遵守MKAnnotaiton协议。

标注的添加与删除操作

在MKMapView类中,不仅可以展示地图信息,同样提供了用于在地图上设置标注的方法,常用的包括添加标注以及移除标注等。添加的标注对象都需要遵守MKAnnotaiton协议。

  • 添加一个标注。
- (void)addAnnotation:(id <MKAnnotation>)annotation;
  • 添加多个标注。
- (void)addAnnotations:(NSArray<id<MKAnnotation>> *)annotations;
  • 移除一个标注。
- (void)removeAnnotation:(id <MKAnnotation>)annotation;
  • 移除多个标注。
- (void)removeAnnotations:(NSArray<id<MKAnnotation>> *)annotations;