iOS開發那些事-iOS6蘋果地圖實用開發

在iOS 6以後,再也不使用谷歌地圖了,而是使用蘋果本身的地圖,可是API編程接口沒有太大的變化。開發人員不須要再學習不少新東西就能開發地圖應用,這是負責任的作法。所以本節介紹的內容也一樣適用於iOS5上運行地圖應用開發。ios

 

iOS應用程序中使用Map Kit API開發地圖應用程序。 其核心是MKMapView類使用。咱們能夠設置地圖顯示方式、控制地圖,能夠在地圖上添加標註。編程

顯示地圖框架

在Map Kit API中顯示地圖的視圖是MKMapView,它的委託協議是MKMapViewDelegate。Map Kit API使用須要導入MapKit框架。學習

下面咱們經過一個案例介紹一下面咱們介紹一下Map Kit API的使用。這個案例在「輸入查詢地點關鍵字」文本框中輸入關鍵字,點擊「查詢」按鈕,先進行地理信息編碼查詢,查詢得到地標信息後,在地圖上標註出來。測試

1

首先添加框架MapKit.framework。而後在工程中打開MainStoryboard.storyboard的IB設計,從對象庫中拖拽Map View到設計畫面中。編碼

2

調整它的位置和大小使得Map View儘量填出畫面下面的空白部分,而後爲Map View定義輸入出口。下面咱們看看主視圖控制器ViewController.h代碼:atom

  1. #import <UIKit/UIKit.h>  
  2.   
  3. #import <MapKit/MapKit.h>  
  4.   
  5. #import 」MapLocation.h」  
  6.   
  7.    
  8.   
  9. @interface ViewController : UIViewController <MKMapViewDelegate>  
  10.   
  11.    
  12.   
  13. @property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;  
  14.   
  15.    
  16.   
  17. @property (weak, nonatomic) IBOutlet MKMapView *mapView;  
  18.   
  19.    
  20.   
  21. - (IBAction)geocodeQuery:(id)sender;  
  22.   
  23.    
  24.   
  25. @end  


由 於使用Map Kit API,須要引入頭文件<MapKit/MapKit.h>,頭文件」MapLocation.h」是咱們本身定義的 描述地圖標註點類。在定義ViewController時,還須要聲明實現MKMapViewDelegate協議。txtQueryKey屬性是查詢關 鍵字文本框,mapView屬性是MKMapView類型,它與畫面對應。點擊查詢按鈕觸發geocodeQuery:方法,它處理查詢並在地圖上作標 注。spa

下面我看看ViewController.m的viewDidLoad方法代碼:.net

  1. - (void)viewDidLoad  
  2.   
  3. {  
  4.   
  5. [super viewDidLoad];  
  6.   
  7. _mapView.mapType = MKMapTypeStandard;  
  8.   
  9. _mapView.delegate = self;  
  10.   
  11. }  


在viewDidLoad方法中設置地圖的類型,它的類型有3種:設計

MKMapTypeStandard 標註地圖類型。

MKMapTypeSatellite 衛星地圖類型。在衛星地圖中沒有街道名稱等信息;

MKMapTypeHybrid 混合地圖類型。在混合地圖是在衛星地圖上標註出街道等信息;

3 4 5

viewDidLoad方法的_mapView.delegate = self語句是當前視圖控制器賦值給地圖視圖的delegate屬性,這樣地圖視圖在須要的時候就會回調ViewController,若是失敗,回調下面的失敗方法:

  1. - (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {  
  2.   
  3. NSLog(@」error : %@」,[error description]);  
  4.   
  5. }  


跟蹤用戶位置變化

MapKit提供了跟蹤用戶位置和方向變化的API,咱們不用本身編寫定位服務代碼。開啓地圖視圖的showsUserLocation屬性,並設置方法setUserTrackingMode:就能夠了,代碼以下:

  1. - (void)viewDidLoad  
  2.   
  3. {  
  4.   
  5. [super viewDidLoad];  
  6.   
  7. if ([CLLocationManager locationServicesEnabled])  
  8.   
  9. {  
  10.   
  11. _mapView.mapType = MKMapTypeStandard;  
  12.   
  13. _mapView.delegate = self;  
  14.   
  15. _mapView.showsUserLocation = YES;  
  16.   
  17. [_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];  
  18.   
  19. }  
  20.   
  21. }  


其中代碼_mapView.showsUserLocation = YES,容許跟蹤顯示用戶位置信息。在iOS設備中顯示用戶位置方式是一個發亮的藍色小圓點。

7

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]語句設置用戶跟蹤模式,用戶跟蹤模式有3種:

MKUserTrackingModeNone 。沒有用戶跟蹤模式;

MKUserTrackingModeFollow 。能夠跟蹤用戶的位置變化;

MKUserTrackingModeFollowWithHeading 。能夠跟蹤用戶的位置和方向變化;

而後,咱們還須要實現地圖視圖委託方法mapView:didUpdateUserLocation:,它的代碼以下:

  1. - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation  
  2.   
  3. {  
  4.   
  5. _mapView.centerCoordinate = userLocation.location.coordinate;  
  6.   
  7. }  


該委託方法在定位服務更新完成用戶位置時候回調該方法,咱們在該方法中從新調整地圖的中心點爲當前用戶的中心點,其中_mapView.centerCoordinate = userLocation.location.coordinate語句就是實現該目的。

這幾行代碼就能夠跟蹤用戶位置的變化了,可是爲了這樣一個小的案例拿着iPhone在外面跑一圈進行測試沒有必要。可使用模擬器測試,模擬器有幾個固定的模式能夠發出連續變化的數據。測試運行在畫面中會有一個小圓圈,它按照咱們設定的速度一直運行。

8

相關文章
相關標籤/搜索