你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發那些事-iOS6蘋果地圖實用開發

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

編輯:IOS開發綜合

在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代碼:

[cpp]
#import <UIKit/UIKit.h>  
 
#import <MapKit/MapKit.h>  
 
#import ”MapLocation.h”  
 
  
 
@interface ViewController : UIViewController <MKMapViewDelegate> 
 
  
 
@property (weak, nonatomic) IBOutlet UITextField *txtQueryKey; 
 
  
 
@property (weak, nonatomic) IBOutlet MKMapView *mapView; 
 
  
 
- (IBAction)geocodeQuery:(id)sender; 
 
  
 
@end 

#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>

#import ”MapLocation.h”

 

@interface ViewController : UIViewController <MKMapViewDelegate>

 

@property (weak, nonatomic) IBOutlet UITextField *txtQueryKey;

 

@property (weak, nonatomic) IBOutlet MKMapView *mapView;

 

- (IBAction)geocodeQuery:(id)sender;

 

@end


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

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

[cpp]
- (void)viewDidLoad 
 

 
[super viewDidLoad]; 
 
_mapView.mapType = MKMapTypeStandard; 
 
_mapView.delegate = self; 
 

- (void)viewDidLoad

{

[super viewDidLoad];

_mapView.mapType = MKMapTypeStandard;

_mapView.delegate = self;

}


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

MKMapTypeStandard 標注地圖類型。

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

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

 

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

[cpp]
- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error { 
 
NSLog(@”error : %@”,[error description]); 
 

- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {

NSLog(@”error : %@”,[error description]);

}


跟蹤用戶位置變化

MapKit提供了跟蹤用戶位置和方向變化的API,我們不用自己編寫定位服務代碼。開啟地圖視圖的showsUserLocation屬性,並設置方法setUserTrackingMode:就可以了,代碼如下:

[cpp]
- (void)viewDidLoad 
 

 
[super viewDidLoad]; 
 
if ([CLLocationManager locationServicesEnabled]) 
 

 
_mapView.mapType = MKMapTypeStandard; 
 
_mapView.delegate = self; 
 
_mapView.showsUserLocation = YES; 
 
[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES]; 
 

 

- (void)viewDidLoad

{

[super viewDidLoad];

if ([CLLocationManager locationServicesEnabled])

{

_mapView.mapType = MKMapTypeStandard;

_mapView.delegate = self;

_mapView.showsUserLocation = YES;

[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];

}

}


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

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved