地图
iOS从6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的。这样一来,如果在iOS6.0之前进行地图开发的话使用方法会有所不同,基于目前的情况其实使用iOS6.0之前版本的系统基本已经寥寥无几了,所有在接下来的内容中不会再针对iOS5及之前版本的地图开发进行介绍。
在iOS中进行地图开发主要有两种方式,一种是直接利用MapKit框架进行地图开发,利用这种方式可以对地图进行精准的控制;另一种方式是直接调用苹果官方自带的地图应用,主要用于一些简单的地图应用(例如:进行导航覆盖物填充等),无法进行精确的控制。当然,本节重点内容还是前者,后面的内容也会稍加提示。
用MapKit之前需要简单了解一下MapKit中地图展示控件MKMapView的的一些常用属性和方法,具体如下表:
| 属性 | 说明 |
| userTrackingMode |
跟踪类型,是一个枚举: MKUserTrackingModeNone :不进行用户位置跟踪; MKUserTrackingModeFollow :跟踪用户位置; MKUserTrackingModeFollowWithHeading :跟踪用户位置并且跟踪用户前进方向; |
| mapType |
地图类型,是一个枚举: MKMapTypeStandard :标准地图,一般情况下使用此地图即可满足; MKMapTypeSatellite :卫星地图; MKMapTypeHybrid :混合地图,加载最慢比较消耗资源; |
| userLocation | 用户位置,只读属性 |
| annotations | 当前地图中的所有大头针,只读属性 |
| 对象方法 | 说明 |
| - (void)addAnnotation:(id <MKAnnotation>)annotation; | 添加大头针,对应的有添加大头针数组 |
| - (void)removeAnnotation:(id <MKAnnotation>)annotation; | 删除大头针,对应的有删除大头针数组 |
|
- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated; |
设置地图显示区域,用于控制当前屏幕显示地图范围 |
| - (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; | 设置地图中心点位置 |
| - (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view; | 将地理坐标(经纬度)转化为数学坐标(UIKit坐标) |
| - (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view; | 将数学坐标转换为地理坐标 |
| - (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier; | 从缓存池中取出大头针,类似于UITableView中取出UITableViewCell,为了进行性能优化而设计 |
| - (void)selectAnnotation:(id <MKAnnotation>)annotation animated:(BOOL)animated; | 选中指定的大头针 |
| - (void)deselectAnnotation:(id <MKAnnotation>)annotation animated:(BOOL)animated; | 取消选中指定的大头针 |
| 代理方法 | 说明 |
| - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation ; | 用户位置发生改变时触发(第一次定位到用户位置也会触发该方法) |
| - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation ; | 显示区域发生改变后触发 |
| - (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView; | 地图加载完成后触发 |
| - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation; | 显示大头针时触发,返回大头针视图,通常自定义大头针可以通过此方法进行 |
| - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view | 点击选中某个大头针时触发 |
| - (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view | 取消选中大头针时触发 |
| - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay | 渲染地图覆盖物时触发 |










