在ios 6之後,不再使用谷歌地圖了,而是使用蘋果自己的地圖,但是api程式設計接口沒有太大的變化。開發人員不需要再學習很多新東西就能開發地圖應用,這是負責任的做法。是以本節介紹的内容也同樣适用于ios5上運作地圖應用開發。
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代碼:
由于使用map kit api,需要引入頭檔案<mapkit/mapkit.h>,頭檔案”maplocation.h”是我們自己定義的描述地圖示注點類。在定義viewcontroller時,還需要聲明實作mkmapviewdelegate協定。txtquerykey屬性是查詢關鍵字文本框,mapview屬性是mkmapview類型,它與畫面對應。點選查詢按鈕觸發geocodequery:方法,它處理查詢并在地圖上做标注。
下面我看看viewcontroller.m的viewdidload方法代碼:
在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在外面跑一圈進行測試沒有必要。可以使用模拟器測試,模拟器有幾個固定的模式可以發出連續變化的資料。測試運作在畫面中會有一個小圓圈,它按照我們設定的速度一直運作。