中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-03 11:35:06 來源:網絡 閱讀:1531 作者:tony關東升 欄目:移動開發

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

#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方法代碼:

- (void)viewDidLoad
{
[super viewDidLoad];
_mapView.mapType = MKMapTypeStandard;
_mapView.delegate = self;
}

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

MKMapTypeStandard 標注地圖類型。

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

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

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

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

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

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

}

跟蹤用戶位置變化

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

- (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設備中顯示用戶位置方式是一個發亮的藍色小圓點。

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

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

MKUserTrackingModeNone 。沒有用戶跟蹤模式;

MKUserTrackingModeFollow 。可以跟蹤用戶的位置變化;

MKUserTrackingModeFollowWithHeading 。可以跟蹤用戶的位置和方向變化;

然后,我們還需要實現地圖視圖委托方法mapView:didUpdateUserLocation:,它的代碼如下:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
_mapView.centerCoordinate = userLocation.location.coordinate;
}

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

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

特克斯县| 科尔| 靖边县| 肇东市| 五家渠市| 宁强县| 长岛县| 定襄县| 织金县| 颍上县| 洪雅县| 新和县| 化德县| 兴国县| 金沙县| 平果县| 思南县| 清涧县| 柯坪县| 沙田区| 玛多县| 吴堡县| 江永县| 花垣县| 孙吴县| 马关县| 鹤峰县| 大同市| 清远市| 松阳县| 贵阳市| 延津县| 康乐县| 松江区| 甘德县| 古交市| 绵竹市| 临潭县| 武邑县| 武城县| 阳新县|