在iOS 6以后,再也不使用谷歌地图了,而是使用苹果本身的地图,可是API编程接口没有太大的变化。开发人员不须要再学习不少新东西就能开发地图应用,这是负责任的作法。所以本节介绍的内容也一样适用于iOS5上运行地图应用开发。ios
iOS应用程序中使用Map Kit API开发地图应用程序。 其核心是MKMapView类使用。咱们能够设置地图显示方式、控制地图,能够在地图上添加标注。编程
显示地图框架
在Map Kit API中显示地图的视图是MKMapView,它的委托协议是MKMapViewDelegate。Map Kit API使用须要导入MapKit框架。学习
下面咱们经过一个案例介绍一下面咱们介绍一下Map Kit API的使用。这个案例在“输入查询地点关键字”文本框中输入关键字,点击“查询”按钮,先进行地理信息编码查询,查询得到地标信息后,在地图上标注出来。测试
首先添加框架MapKit.framework。而后在工程中打开MainStoryboard.storyboard的IB设计,从对象库中拖拽Map View到设计画面中。编码
调整它的位置和大小使得Map View尽量填出画面下面的空白部分,而后为Map View定义输入出口。下面咱们看看主视图控制器ViewController.h代码:atom
由 于使用Map Kit API,须要引入头文件<MapKit/MapKit.h>,头文件”MapLocation.h”是咱们本身定义的 描述地图标注点类。在定义ViewController时,还须要声明实现MKMapViewDelegate协议。txtQueryKey属性是查询关 键字文本框,mapView属性是MKMapView类型,它与画面对应。点击查询按钮触发geocodeQuery:方法,它处理查询并在地图上作标 注。spa
下面我看看ViewController.m的viewDidLoad方法代码:.net
在viewDidLoad方法中设置地图的类型,它的类型有3种:设计
MKMapTypeStandard 标注地图类型。
MKMapTypeSatellite 卫星地图类型。在卫星地图中没有街道名称等信息;
MKMapTypeHybrid 混合地图类型。在混合地图是在卫星地图上标注出街道等信息;
viewDidLoad方法的_mapView.delegate = self语句是当前视图控制器赋值给地图视图的delegate属性,这样地图视图在须要的时候就会回调ViewController,若是失败,回调下面的失败方法:
跟踪用户位置变化
MapKit提供了跟踪用户位置和方向变化的API,咱们不用本身编写定位服务代码。开启地图视图的showsUserLocation属性,并设置方法setUserTrackingMode:就能够了,代码以下:
其中代码_mapView.showsUserLocation = YES,容许跟踪显示用户位置信息。在iOS设备中显示用户位置方式是一个发亮的蓝色小圆点。
[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]语句设置用户跟踪模式,用户跟踪模式有3种:
MKUserTrackingModeNone 。没有用户跟踪模式;
MKUserTrackingModeFollow 。能够跟踪用户的位置变化;
MKUserTrackingModeFollowWithHeading 。能够跟踪用户的位置和方向变化;
而后,咱们还须要实现地图视图委托方法mapView:didUpdateUserLocation:,它的代码以下:
该委托方法在定位服务更新完成用户位置时候回调该方法,咱们在该方法中从新调整地图的中心点为当前用户的中心点,其中_mapView.centerCoordinate = userLocation.location.coordinate语句就是实现该目的。
这几行代码就能够跟踪用户位置的变化了,可是为了这样一个小的案例拿着iPhone在外面跑一圈进行测试没有必要。可使用模拟器测试,模拟器有几个固定的模式能够发出连续变化的数据。测试运行在画面中会有一个小圆圈,它按照咱们设定的速度一直运行。