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

MapKit框架:5-复杂地图标注(MKAnnotationView)

借助MKPointAnnotation类,我们可以快速的创建地图标注,但MKPointAnnotation类的标注样式是由系统定义的,程序员不能够对其样式进行修改。在实际的开发中,为了体现App的特性,我们有时会需要对地图标注的样式进行自定义。当我们需要创建复杂地图标注时,就需要使用MKAnnotationView。

MKAnnotationView简介

MKAnnotationView类是MapKit框架中提供的类,用于创建复杂的地图标注。在MKAnnotationView类中,提供了用于定制标注左侧、右侧以及“大头针”样式的属性。例如在滴滴打车中的图标样式,我们就可以为其添加左侧的视图以及更新其“大头针”样式图标。

MKAnnotationView类继承自UIView,在该类提供的API中,提供了用于定制地图标注样式的属性,有如下几个需要重点掌握。

  • 实例化方法。需要传入一个遵守MKAnnotation协议的参数,用于提供标注所在的位置,因此,当我们创建MKAnnotationView对象之前,需要提前创建一个遵守MKAnnotation协议的对象作为参数传入。
- (instancetype)initWithAnnotation:(nullable id <MKAnnotation>)annotation reuseIdentifier:(nullable NSString *)reuseIdentifier;
  • 设置标注显示的图片。
@property (nonatomic, strong) UIImage *image;
  • 设置标注右边的控件样式。
@property (strong, nonatomic) UIView *rightCalloutAccessoryView;
  • 设置标注左边的控件样式。
@property (strong, nonatomic) UIView *leftCalloutAccessoryView;
  • 设置标注下面的显示控件(需要iOS9.0+)。
@property (nonatomic, strong) UIView *detailCalloutAccessoryView;
  • 点击标注后,是否显示标注的详细信息。
@property (nonatomic) BOOL canShowCallout;

MKAnnotationView的设置方法

假如希望地图标注使用自定义的样式,需要在MKMapViewDelegate代理协议中的mapView:viewForAnnotation:方法中完成。在该方法中,可以传入添加到MKMapView上的每一个annotation对象,因此我们可以为不同的annotation设置不同的标注样式。

- (nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation;

MKPinAnnotationView类

MKPinAnnotationView类是MKAnnotationView类的子类,在MKPinAnnotationView类中提供了一些快速设置默认标注样式的方法,主要体现在可以对“大头针”的颜色进行设置。

@property (NS_NONATOMIC_IOSONLY, strong, null_resettable) UIColor *pinTintColor;

另外,在MKPinAnnotationView类中,还提供了一个地图标注从天而降的动画效果。

@property (nonatomic) BOOL animatesDrop;

示例代码

https://github.com/99ios/17.3.5