MKMapView

在MapKit框架中,最重要的一个类就是MKMapView类。MKMapView类可以为用户提供一个展示地图的界面,程序员可以在地图上进行进一步的功能定制。

在MKMapView类中,有如下一些比较常用的属性和方法。

设置地图的展示类型。在MKMapView中提供了3种地图展示的方式,分别为
MKMapTypeStandard(标准图)、
MKMapTypeSatellite(卫星图)、
MKMapTypeHybrid(混合图),
其中最常用的是MKMapTypeStandard(标准图)。
// 设置地图的展示类型。
@property(nonatomic) MKMapType mapType;
// 当前地图的中心坐标。通常情况下,可以获取用户的当前位置,并且赋值给centerCoordinate属性。
@property(nonatomic) CLLocationCoordinate2D centerCoordinate;
// 设置显示区域的范围。
@property(nonatomic) MKCoordinateRegion region;
// 设置MKMapView的代理对象,MKMapView的代理对象需要遵守MKMapViewDelegate协议。
@property(nonatomic, weak, nullable) id<MKMapViewDelegate> delegate;
// 设置地图是否可缩放,默认可缩放。
@property(nonatomic, getter=isZoomEnabled) BOOL zoomEnabled;
// 用户追踪模式。
@property(nonatomic) MKUserTrackingMode userTrackingMode;
// 获取的用户的位置坐标。MKUserLocation类中提供了一个CLLocation类型的属性location,可以用户获取用户的位置信息。
@property(nonatomic, readonly) MKUserLocation *userLocation;
// 是否显示交通情况。
@property(nonatomic) VOOL showsTraffic;
// 是否显示比例尺。
@property(nonatomic) BOOL showsScale;
// 是否显示指南针。
@property(nonatomic) BOOL showsCompass;

MKMapView中定义了MKMapViewDelegate代理协议,在该代理协议中提供了用于监测MKMapView加载过程的方法。

// 地图即将开始加载时调用。
-(void) mapViewWillStartLoadingMap:(MKMapView *)mapView;
// 地图加载完毕后调用。
-(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView;
// 地图加载失败调用。
-(void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error;
// 用户位置更新时调用,该方法调用非常频繁,可以不断监测用户的当前位置,通过其提供的userLocation参数,可以获取到用户的最新位置信息。
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation;
// 地图的显示的区域即将发生改变的时候调用。
-(void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
// 地图的显示区域已经发生改变的时候调用。
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
// 自定义“大头针”样式。
-(nullable MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnimatation:(id <MKAnnotation>)annotation;

MKMapView的基本使用

示例

简易地图标注

当用户在地图上搜索某个地址时,搜索结果会以一个“大头针”的样式插在地图上,这些“大头针”就是地图上的标注。“大头针”不仅可以显示某个地址在地图中的位置,同时还可以显示该地址的一些附加信息

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

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

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

 

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

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

5 复杂地图标注

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(nonatomic, strong) UIView *rightCalloutAccessoryView;
// 设置标注左边的控件样式。
@property(nonatomic, strong) UIView *leftCalloutAccessoryView;
// 设置标注下面的显示控件(需要iOS 9.0+)。
@property(nonatomic, strong) UIView *detailCalloutAccessoryView;
// 点击标注后,是否显示标注的详细信息。
@property(nonatomic) BOOL canShowCallout;

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

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

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

@property(NS_NONATOMIC_IOSONLY, strong, null_resettable) UIColor *pinTintColor;
// 一个地图标注从天而降的动画效果。
@property(nonatomic) BOOL animatesDrop;

本节的示例代码,在MKMapView上实现了添加自定义样式的地图标注,该地图标注的图标使用自定义图片,点击图标后,可以在附加视图的左右两侧各添加一个按钮。

在进行地图标注样式定制之前,需要提前完成如下代码的编写:

初始化一个MKMapView类的对象,并设置属性;
初始化一个MKPointAnnotation类的对象,设置其属性,并添加到MKMapView对象上;
设置MKMapView对象的代理对象,通常为控制器对象,然后设置控制器对象遵守MKMapViewDelegate协议;
添加MKMapView到控制器视图上。

实现地图标注的定制

示例

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值