地圖的基本使用-MKMapView(地圖顯示)
- MapKit有一個比較重要的UI控件 :MKMapView,專門用于地圖顯示
- 設(shè)置MKMapView對應(yīng)的屬性時莲趣,注意該屬性是從哪個系統(tǒng)版本開始引入的鸳慈,做好不同系統(tǒng)版本的適配
1. 設(shè)置地圖顯示類型
地圖的樣式可以手動設(shè)置, 在iOS9.0之前有3種, iOS9.0之后增加了2種
設(shè)置方式
self.mapView.mapType = MKMapTypeStandard;
枚舉類型 | 對應(yīng)含義 |
---|---|
MKMapTypeStandard | 標(biāo)準(zhǔn)地圖 |
MKMapTypeSatellite | 衛(wèi)星地圖 |
MKMapTypeHybrid | 混合模式(標(biāo)準(zhǔn)+衛(wèi)星) |
MKMapTypeSatelliteFlyover | 3D立體衛(wèi)星(iOS9.0) |
MKMapTypeHybridFlyover | 3D立體混合(iOS9.0) |
- 實例圖片在本文末尾
2. 設(shè)置地圖控制項
地圖的旋轉(zhuǎn), 縮放, 移動等等操作行為都可以開啟或者關(guān)閉
設(shè)置方式
self.customMapView.zoomEnabled = YES; // 是否縮放
self.customMapView.scrollEnabled = YES; // 是否滾動
self.customMapView.rotateEnabled = YES; // 是否旋轉(zhuǎn)
self.customMapView.pitchEnabled = NO; // 是否顯示3DVIEW
3. 設(shè)置地圖顯示項
地圖上的指南針, 比例尺, 建筑物, POI點都可以控制是否顯示
設(shè)置方式
// 是否顯示指南針(iOS9.0)
self.customMapView.showsCompass = YES;
// 是否顯示比例尺(iOS9.0)
self.customMapView.showsScale = YES;
// 是否顯示交通(iOS9.0)
self.customMapView.showsTraffic = YES;
// 是否顯示建筑物
self.customMapView.showsBuildings = YES;
// 顯示興趣點
self.customMapView.showsPointsOfInterest = true
4. 顯示用戶位置
- 效果:
- 可以設(shè)置顯示用戶當(dāng)前所在位置,以一個藍(lán)點(大頭針)的形式呈現(xiàn)在地圖上
-
地圖不會縮放,而且當(dāng)用戶位置移動時,地圖不會跟隨用戶位置移動而移動
- 設(shè)置方式
self.customMapView.showsUserLocation = YES;
**注意事項: 如果要顯示用戶位置, 在iOS8.0之后, 需要主動請求用戶授權(quán)**
5. 追蹤用戶位置 - 不夠靈活
-
效果:
- 會在地圖上顯示一個藍(lán)點, 標(biāo)識用戶所在位置;
- iOS8.0-,地圖不會自動滾動到用戶所在位置
- iOS8.0+喧伞,地圖會自動放大到合適比例走芋,當(dāng)用戶位置移動時, 地圖會跟隨用戶位置移動而移動; 但是有時候失效;
設(shè)置方式
self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
注意事項: 如果要顯示用戶位置, 在iOS8.0之后, 需要主動請求用戶授權(quán)
3 userTrackingMode屬性
userTrackingMode屬性 | 含義 |
---|---|
MKUserTrackingModeNone | 不跟蹤用戶的位置 |
MKUserTrackingModeFollow | 跟蹤并在地圖上顯示用戶的當(dāng)前位置 |
MKUserTrackingModeFollowWithHeading | 跟蹤并在地圖上顯示用戶的當(dāng)前位置绩郎,地圖會跟隨用戶的前進(jìn)方向進(jìn)行旋轉(zhuǎn) |
6.MKMapView的代理
MKMapView可以設(shè)置一個代理對象,用來監(jiān)聽地圖的相關(guān)行為
-
常見的代理方法有:
// 位置變化時調(diào)用翁逞,每個位置變化時只調(diào)用一次 // 每次調(diào)用肋杖,都會把用戶的最新位置(userLocation參數(shù))傳進(jìn)來 // MKUserLocation: 系統(tǒng)大頭針數(shù)據(jù)模型,內(nèi)含用戶位置 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation; // 地圖的顯示區(qū)域即將發(fā)生改變的時候調(diào)用 - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated; // 地圖的顯示區(qū)域已經(jīng)發(fā)生改變的時候調(diào)用 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;
6. 測試環(huán)境
- 加載地圖數(shù)據(jù)需要聯(lián)網(wǎng)
- XCode版本根據(jù)測試選擇不同版本
- iOS9.0 只能使用 XCode7.0版本
- iOS系統(tǒng)版本根據(jù)測試選擇不同版本
- 例如地圖類型, 在iOS9.0之后才有新增
7. 常見問題總結(jié)
1. 地圖加載不顯示?
檢查網(wǎng)絡(luò)是否通暢
2. 地圖放的太大都是格子, 禁止瀏覽
正常, 為了國家安全等原因, 不能看的太詳細(xì)
3. 地圖運行起來APP占用內(nèi)存非常大
正常, 地圖加載了很多資源
4. 用戶位置不顯示
首先, 檢查代碼, 是否有設(shè)置顯示用戶位置,是否有進(jìn)行請求位置授權(quán)
其次, 查看模擬器是否有位置信息
第三, 重置模擬器, 模擬器又發(fā)神經(jīng)了.