地圖的基本使用-MKMapView

地圖的基本使用-MKMapView(地圖顯示)

  • MapKit有一個比較重要的UI控件 :MKMapView,專門用于地圖顯示
  • 設(shè)置MKMapView對應的屬性時,注意該屬性是從哪個系統(tǒng)版本開始引入的,做好不同系統(tǒng)版本的適配

1. 設(shè)置地圖顯示類型

  1. 地圖的樣式可以手動設(shè)置, 在iOS9.0之前有3種, iOS9.0之后增加了2種

  2. 設(shè)置方式

self.mapView.mapType = MKMapTypeStandard;
枚舉類型 對應含義
MKMapTypeStandard 標準地圖
MKMapTypeSatellite 衛(wèi)星地圖
MKMapTypeHybrid 混合模式(標準+衛(wèi)星)
MKMapTypeSatelliteFlyover 3D立體衛(wèi)星(iOS9.0)
MKMapTypeHybridFlyover 3D立體混合(iOS9.0)
  • 實例圖片在本文末尾

2. 設(shè)置地圖控制項

  1. 地圖的旋轉(zhuǎn), 縮放, 移動等等操作行為都可以開啟或者關(guān)閉

  2. 設(shè)置方式

self.customMapView.zoomEnabled = YES;   // 是否縮放
self.customMapView.scrollEnabled = YES; // 是否滾動
self.customMapView.rotateEnabled = YES; // 是否旋轉(zhuǎn)
self.customMapView.pitchEnabled = NO; // 是否顯示3DVIEW

3. 設(shè)置地圖顯示項

  1. 地圖上的指南針, 比例尺, 建筑物, POI點都可以控制是否顯示

  2. 設(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. 顯示用戶位置

  1. 效果:
    1. 可以設(shè)置顯示用戶當前所在位置,以一個藍點(大頭針)的形式呈現(xiàn)在地圖上
    • 地圖不會縮放,而且當用戶位置移動時,地圖不會跟隨用戶位置移動而移動


      用戶位置.png
  1. 設(shè)置方式
self.customMapView.showsUserLocation = YES;
**注意事項: 如果要顯示用戶位置, 在iOS8.0之后, 需要主動請求用戶授權(quán)**

5. 追蹤用戶位置 - 不夠靈活

  1. 效果:

    • 會在地圖上顯示一個藍點, 標識用戶所在位置;
    • iOS8.0-,地圖不會自動滾動到用戶所在位置
    • iOS8.0+,地圖會自動放大到合適比例,當用戶位置移動時, 地圖會跟隨用戶位置移動而移動; 但是有時候失效;
  2. 設(shè)置方式

self.customMapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;

注意事項: 如果要顯示用戶位置, 在iOS8.0之后, 需要主動請求用戶授權(quán)

3 userTrackingMode屬性

userTrackingMode屬性 含義
MKUserTrackingModeNone 不跟蹤用戶的位置
MKUserTrackingModeFollow 跟蹤并在地圖上顯示用戶的當前位置
MKUserTrackingModeFollowWithHeading 跟蹤并在地圖上顯示用戶的當前位置,地圖會跟隨用戶的前進方向進行旋轉(zhuǎn)

6.MKMapView的代理

  • MKMapView可以設(shè)置一個代理對象,用來監(jiān)聽地圖的相關(guān)行為

  • 常見的代理方法有:

    // 位置變化時調(diào)用,每個位置變化時只調(diào)用一次
    // 每次調(diào)用,都會把用戶的最新位置(userLocation參數(shù))傳進來
    // 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)境

  1. 加載地圖數(shù)據(jù)需要聯(lián)網(wǎng)
  • XCode版本根據(jù)測試選擇不同版本
    • iOS9.0 只能使用 XCode7.0版本
  • iOS系統(tǒng)版本根據(jù)測試選擇不同版本
    • 例如地圖類型, 在iOS9.0之后才有新增

7. 常見問題總結(jié)

    1. 地圖加載不顯示?
        檢查網(wǎng)絡是否通暢

    2. 地圖放的太大都是格子, 禁止瀏覽
        正常, 為了國家安全等原因, 不能看的太詳細

    3. 地圖運行起來APP占用內(nèi)存非常大
        正常, 地圖加載了很多資源

    4. 用戶位置不顯示
        首先, 檢查代碼, 是否有設(shè)置顯示用戶位置,是否有進行請求位置授權(quán)
        其次, 查看模擬器是否有位置信息
        第三, 重置模擬器, 模擬器又發(fā)神經(jīng)了.

8.地圖類型實例圖片

標準地圖:

MKMapTypeStandard.png

衛(wèi)星地圖:

MKMapTypeSatellite.png

混合模式(標準+衛(wèi)星):

MKMapTypeHybrid.png

3D立體衛(wèi)星:

MKMapTypeSatelliteFlyover.png

3D立體混合:

MKMapTypeHybridFlyover.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容