iOS地圖MKMapView(一)

這篇文章有以下三個(gè)知識(shí)點(diǎn)

  • 設(shè)置地圖類型
  • 在地圖上面顯示用戶位置
  • 設(shè)置用戶大頭針信息
顯示地圖:

在storyboard中拖個(gè)MKMapView或是用代碼創(chuàng)建個(gè)MKMapView添加到視圖中就可以了膏孟。
注意import MapKit,不然會(huì)報(bào)錯(cuò)。

設(shè)置地圖類型

設(shè)置地圖類型只需設(shè)置MKMapView的mapType屬性拌汇。

open var mapType: MKMapType // 地圖類型

MKMapType是一個(gè)結(jié)構(gòu)體

public enum MKMapType : UInt {
case standard //標(biāo)準(zhǔn)類型
case satellite // 衛(wèi)星類型
case hybrid // 標(biāo)準(zhǔn)和衛(wèi)星結(jié)合的混合類型
}
MKMapType枚舉還有一些其他的值柒桑,但是目前在中國(guó)還沒有支持,了解下就可以了噪舀。

下面是mapType屬性的使用代碼和效果圖

  @IBOutlet weak var mapView: MKMapView!
    /// 切換segmentController值變化的時(shí)候調(diào)用這個(gè)方法
    ///
    /// - Parameter sender: UISegmentedControl
    @IBAction func segmentControlValueChange(_ sender: UISegmentedControl) {
        
        
        switch sender.selectedSegmentIndex {
        case 0:
            mapView.mapType = .standard // 用標(biāo)準(zhǔn)類型
        case 1:
            mapView.mapType = .satellite // 用衛(wèi)星類型
        case 2:
            mapView.mapType = .hybrid  // 用標(biāo)準(zhǔn)和衛(wèi)星混合的類型
        default:
            break
        }
        
    }

標(biāo)準(zhǔn)類型效果圖:


Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 14.35.36.png

衛(wèi)星類型效果圖:


Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 14.12.46.png

混合類型效果圖:


Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 14.13.17.png
提示:
  1. 衛(wèi)星類型和混合類型不仔細(xì)看的話沒太大區(qū)別魁淳,放大地圖看的話會(huì)有很大區(qū)別

  2. 衛(wèi)星類型用的比較少,因?yàn)榭床坏匠鞘械刃畔ⅰ?/p>

  3. 以上更改地圖類型的代碼可以簡(jiǎn)潔為一句

    /// 切換segmentController值變化的時(shí)候調(diào)用這個(gè)方法
    ///
    /// - Parameter sender: UISegmentedControl
    @IBAction func segmentControlValueChange(_ sender: UISegmentedControl) {
        
        mapView.mapType = MKMapType(rawValue: UInt(sender.selectedSegmentIndex))!
        
    }

在地圖上面顯示用戶位置

要顯示用戶位置与倡,需要兩步

  1. 獲取用戶位置授權(quán)
  2. 設(shè)置MKMapView的userTrackingMode屬性

獲取用戶位置授權(quán)在我之前的文章寫過了界逛。淺談iOS定位,這里就不啰嗦了纺座。

userTrackingMode屬性

open var userTrackingMode: MKUserTrackingMode // 用戶追蹤模式

MKUserTrackingMode是個(gè)結(jié)構(gòu)體

public enum MKUserTrackingMode : Int {
case none // 不獲取用戶位置
case follow // 獲取用戶位置不顯示方向信息
case followWithHeading // 獲取用戶位置顯示方向信息
}

實(shí)例代碼:

@IBOutlet weak var mapView: MKMapView!
    var manager = CLLocationManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 請(qǐng)求用戶授權(quán)
        manager.requestWhenInUseAuthorization()
         // 獲取用戶位置不顯示方向信息
//        mapView.userTrackingMode = .follow
        // 獲取用戶位置顯示方向信息
        mapView.userTrackingMode = .followWithHeading
    }

mapView.userTrackingMode = .follow的效果圖:

Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 14.58.56.png

mapView.userTrackingMode = .followWithHeading的效果圖:

Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 14.57.57.png

設(shè)置用戶大頭針信息

沒有實(shí)現(xiàn)功能前的效果圖:

Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 15.07.04.png

實(shí)現(xiàn)功能后的效果圖:

Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 15.08.11.png

代碼實(shí)現(xiàn):

    @IBOutlet weak var mapView: MKMapView!
    var manager = CLLocationManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 請(qǐng)求用戶授權(quán)
        manager.requestWhenInUseAuthorization()
        
        // 設(shè)置用戶追蹤模式
        mapView.userTrackingMode = .follow
//        mapView.userTrackingMode = .followWithHeading
        
        mapView.delegate = self
    }

    /// 更新用戶位置完成時(shí)候調(diào)用的MKMapView代理方法
    ///
    /// - Parameters:
    ///   - mapView: MKMapView
    ///   - userLocation: 用戶位置屬性
    func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
        
        let geocoder = CLGeocoder()
        
        // 反地理編碼
        geocoder.reverseGeocodeLocation(userLocation.location!) { (placemarks: [CLPlacemark]?, error: Error?) in
            
            // 設(shè)置用戶位置的標(biāo)題是城市
            userLocation.title = placemarks?.last?.locality
            
            // 設(shè)置用戶位置的子標(biāo)題是具體位置
            userLocation.subtitle = placemarks?.last?.name
        }
        
    }

MKUserLocation這個(gè)類指的是地圖上顯示用戶當(dāng)前位置的圓點(diǎn)息拜。設(shè)置title和subtitle屬性就可以設(shè)置用戶位置信息。

這個(gè)類遵守了MKAnnotation協(xié)議,實(shí)現(xiàn)了title和subtitle屬性少欺。

MKAnnotation協(xié)議

public protocol MKAnnotation : NSObjectProtocol {
public var coordinate: CLLocationCoordinate2D { get }. // 經(jīng)緯度類
optional public var title: String? { get } // 標(biāo)題
optional public var subtitle: String? { get } // 子標(biāo)題
}

總結(jié):
設(shè)置用戶位置知識(shí)點(diǎn)只需要兩步

  1. 設(shè)置代理喳瓣,實(shí)現(xiàn)mapView完成用戶位置更新方法。因?yàn)閷?shí)現(xiàn)這個(gè)代理方法才能獲取MKUserLocation對(duì)象
  2. 設(shè)置MKUserLocation這個(gè)類的title和subtitle屬性

以上代碼設(shè)置用戶位置信息知識(shí)點(diǎn)涉及到地理編碼赞别,如果不熟悉畏陕,可以參考筆者之前的iOS地理編碼的簡(jiǎn)單實(shí)現(xiàn)

這篇文章就寫到這里,希望對(duì)你們有幫助氯庆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹭秋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子堤撵,更是在濱河造成了極大的恐慌仁讨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实昨,死亡現(xiàn)場(chǎng)離奇詭異洞豁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荒给,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門丈挟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人志电,你說我怎么就攤上這事曙咽。” “怎么了挑辆?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵例朱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鱼蝉,道長(zhǎng)洒嗤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任魁亦,我火速辦了婚禮渔隶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洁奈。我一直安慰自己间唉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布睬魂。 她就那樣靜靜地躺著终吼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氯哮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音喉钢,去河邊找鬼姆打。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肠虽,可吹牛的內(nèi)容都是我干的幔戏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼税课,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼闲延!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起韩玩,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤垒玲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后找颓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合愈,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年击狮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了佛析。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彪蓬,死狀恐怖寸莫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情档冬,我是刑警寧澤膘茎,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站捣郊,受9級(jí)特大地震影響辽狈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呛牲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一刮萌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娘扩,春花似錦着茸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至灰殴,卻和暖如春敬特,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工伟阔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辣之,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓皱炉,卻偏偏與公主長(zhǎng)得像怀估,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子合搅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 出自http://my.oschina.net/are1OfBlog/blog/420034 摘要 現(xiàn)在很多社交多搀、...
    JJO閱讀 4,135評(píng)論 4 19
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)灾部,斷路器康铭,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • http://www.cnblogs.com/kenshincui/p/4125570.html 摘要: 現(xiàn)在很多...
    大崔老師閱讀 3,281評(píng)論 1 2
  • *初學(xué)地圖時(shí),覺得地圖是個(gè)很高深的玩意兒梳猪,導(dǎo)航麻削、定位、檢索這得運(yùn)用多少算法和核心動(dòng)畫的知識(shí)點(diǎn)啊春弥,于是一直排斥 * ...
    柳駿閱讀 3,755評(píng)論 11 22
  • 地圖的基本使用 1.設(shè)置地圖顯示類型// 1.設(shè)置地圖顯示類型 /** MKM...
    Developer_Yancy閱讀 4,667評(píng)論 3 58