天天看点

iOS开发那些事-iOS6苹果地图实用开发

在ios 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,但是api编程接口没有太大的变化。开发人员不需要再学习很多新东西就能开发地图应用,这是负责任的做法。因此本节介绍的内容也同样适用于ios5上运行地图应用开发。

ios应用程序中使用map kit api开发地图应用程序。 其核心是mkmapview类使用。我们可以设置地图显示方式、控制地图,可以在地图上添加标注。

显示地图

在map kit api中显示地图的视图是mkmapview,它的委托协议是mkmapviewdelegate。map kit api使用需要导入mapkit框架。

下面我们通过一个案例介绍一下面我们介绍一下map kit api的使用。这个案例在“输入查询地点关键字”文本框中输入关键字,点击“查询”按钮,先进行地理信息编码查询,查询获得地标信息后,在地图上标注出来。

iOS开发那些事-iOS6苹果地图实用开发

首先添加框架mapkit.framework。然后在工程中打开mainstoryboard.storyboard的ib设计,从对象库中拖拽map view到设计画面中。

iOS开发那些事-iOS6苹果地图实用开发

调整它的位置和大小使得map view尽可能填出画面下面的空白部分,然后为map view定义输入出口。下面我们看看主视图控制器viewcontroller.h代码:

由于使用map kit api,需要引入头文件<mapkit/mapkit.h>,头文件”maplocation.h”是我们自己定义的描述地图标注点类。在定义viewcontroller时,还需要声明实现mkmapviewdelegate协议。txtquerykey属性是查询关键字文本框,mapview属性是mkmapview类型,它与画面对应。点击查询按钮触发geocodequery:方法,它处理查询并在地图上做标注。

下面我看看viewcontroller.m的viewdidload方法代码:

在viewdidload方法中设置地图的类型,它的类型有3种:

mkmaptypestandard 标注地图类型。

mkmaptypesatellite 卫星地图类型。在卫星地图中没有街道名称等信息;

mkmaptypehybrid 混合地图类型。在混合地图是在卫星地图上标注出街道等信息;

iOS开发那些事-iOS6苹果地图实用开发

viewdidload方法的_mapview.delegate = self语句是当前视图控制器赋值给地图视图的delegate属性,这样地图视图在需要的时候就会回调viewcontroller,如果失败,回调下面的失败方法:

跟踪用户位置变化

mapkit提供了跟踪用户位置和方向变化的api,我们不用自己编写定位服务代码。开启地图视图的showsuserlocation属性,并设置方法setusertrackingmode:就可以了,代码如下:

其中代码_mapview.showsuserlocation = yes,允许跟踪显示用户位置信息。在ios设备中显示用户位置方式是一个发亮的蓝色小圆点。

iOS开发那些事-iOS6苹果地图实用开发

[_mapview setusertrackingmode:mkusertrackingmodefollow animated:yes]语句设置用户跟踪模式,用户跟踪模式有3种:

mkusertrackingmodenone 。没有用户跟踪模式;

mkusertrackingmodefollow 。可以跟踪用户的位置变化;

mkusertrackingmodefollowwithheading 。可以跟踪用户的位置和方向变化;

然后,我们还需要实现地图视图委托方法mapview:didupdateuserlocation:,它的代码如下:

该委托方法在定位服务更新完成用户位置时候回调该方法,我们在该方法中重新调整地图的中心点为当前用户的中心点,其中_mapview.centercoordinate = userlocation.location.coordinate语句就是实现该目的。

这几行代码就可以跟踪用户位置的变化了,但是为了这样一个小的案例拿着iphone在外面跑一圈进行测试没有必要。可以使用模拟器测试,模拟器有几个固定的模式可以发出连续变化的数据。测试运行在画面中会有一个小圆圈,它按照我们设定的速度一直运行。

iOS开发那些事-iOS6苹果地图实用开发

继续阅读