Swift MapKit的使用

MapKit :用于地圖展示崖蜜,例如大頭針,路線豫领、覆蓋層展示等(著重界面展示)

使用步驟

  1. 導入主頭文件 import MapKit 并在framework里面添加MapKit
  2. MapKit有一個比較重要的UI控件 :MKMapView等恐,專門用于地圖顯示
import UIKit
import MapKit

class ViewController: UIViewController {

    @IBOutlet weak var mapkitView: MKMapView!
    lazy var locationM : CLLocationManager =
    {
        let location = CLLocationManager()
        
        if #available(iOS 8.0, *)
        {
            location.requestAlwaysAuthorization()
            if #available(iOS 9.0, *)
            {
                location.allowsBackgroundLocationUpdates = true;
                    
            }
        }
        
        return location
            
    }()
    override func viewDidLoad()
    {
        super.viewDidLoad()
        //1.設置地圖樣式,地圖的樣式可以手動設置, 在iOS9.0之前有3種, iOS9.0之后增加了2種
        //        case standard 標準
        //        case satellite // 衛(wèi)星
        //        case hybrid // 混合(標準加衛(wèi)星)
        
        //        @available(iOS 9.0, *)
        //        case satelliteFlyover 3D立體衛(wèi)星
        //        @available(iOS 9.0, *)
        //        case hybridFlyover 3D立體混合
        mapkitView.mapType = .hybrid
        
        //2.設置地圖的控制項 ,1. 地圖的旋轉, 縮放, 移動等等操作行為都可以開啟或者關閉
        //mapkitView.isScrollEnabled = false //是否滾動
        //mapkitView.isRotateEnabled = false //是否旋轉
        //mapkitView.isZoomEnabled = false //是否縮放
      //mapkitView.isPitchEnabled = false; // 是否顯示3DVIEW
        //3. 設置地圖顯示項 ,地圖上的指南針, 比例尺, 建筑物, POI點都可以控制是否顯示
        //建筑物
        mapkitView.showsBuildings = true
        
        if #available(iOS 9.0, *)
        {
            //指南針
            mapkitView.showsCompass = true
            //比例尺
            mapkitView.showsScale = true
            //交通狀況
            mapkitView.showsTraffic = true
        }
        //興趣地點
        mapkitView.showsPointsOfInterest = true
        
        //4.1 顯示用戶位子
        _ = locationM
        // 顯示一個藍點, 在地圖上面標示用戶的位置信息. **注意事項: 如果要顯示用戶位置, 在iOS8.0之后, 需要主動請求用戶授權**
        // 但是, 不會自動放大地圖, 并且當用戶 位置移動時, 地圖不會自動跟著跑
       // mapkitView.showsUserLocation = true
        //4.2 用戶的追蹤模式
        // 顯示一個藍點, 在地圖上面標示用戶的位置信息
        // 會自動放大地圖, 并且當用戶 位置移動時, 地圖會自動跟著跑
        // 不靈光
        mapkitView.userTrackingMode = .followWithHeading

    }

}

模擬追蹤用戶的位子

        mapkitView.delegate = self
//MARK: - MKMapViewDelegate -
extension ViewController : MKMapViewDelegate
{   // 當地圖更新用戶位置信息時, 調用的方法
    // 藍點: 大頭針"視圖"  大頭針"數據模型"
    func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation)
    {
        //MKUserLocation 大頭針數據模型
        // location : 就是大頭針的位置信息(經緯度)
        // heading: 設備朝向對象
        // title: 彈框標題
        // subtitle: 彈框子標題
        userLocation.title = "哥哥"
        userLocation.subtitle = "工作中。二跋。流昏。"
         // 移動地圖的中心,顯示在當前用戶所在的位置, 并改變區(qū)域
//MKCoordinateSpan 跨度解釋:

//latitudeDelta:緯度跨度,因為南北緯各90.0度谚鄙,所以此值的范圍
//是(0.0---180.0);此值表示撤逢,整個地圖視圖寬度粮坞,顯示多大跨度;
//longitudeDelta:經度跨度莫杈,因為東西經各180.0度筝闹,所以此值范圍是(0.0---360.0):此值表示,整個地圖視圖高度关顷,顯示多大跨度;
0.00805562331540699 0.006232607891206499
 //       mapView.setCenter(userLocation.coordinate, animated: true)
 let center = (userLocation.location?.coordinate)!
        let span = MKCoordinateSpan(latitudeDelta: 0.00805562331540699, longitudeDelta: 0.006232607891206499)
        let region : MKCoordinateRegion = MKCoordinateRegion(center: center, span: span)
        
        mapView.setRegion(region, animated: true)
    }

//當地圖區(qū)域改變的時候調用议双,我們可以獲取顯示的span區(qū)域數據
    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool)
    {
        print(mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta)
        
    }
}


大頭針的使用

  • 自定義大頭針模型
import UIKit
import MapKit

class UserAnnotation: NSObject, MKAnnotation
{
   //確定大頭針的位置
   var coordinate: CLLocationCoordinate2D = CLLocationCoordinate2DMake(0, 0)
   
   //彈框標題
   var title: String?
   //子標題
   var subtitle: String?
   
}
  • 在地圖上操作大頭針,實際上是控制大頭針數據模型
  1. 添加大頭針就是添加大頭針數據模型
  2. 刪除大頭針就是刪除大頭針數據模型
 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
    {
        //創(chuàng)建一個大頭針數據模型
        let userAnnotation : UserAnnotation = UserAnnotation()
        userAnnotation.coordinate = mapkitView.centerCoordinate
        userAnnotation.title = "????好"
        userAnnotation.subtitle = "子標題"
        //添加到地圖上面
        mapkitView.addAnnotation(userAnnotation)
        
    }
    
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
    {
        //獲取所有大頭針的模型
        let annotataions = mapkitView.annotations
        
        //2. 移除
        mapkitView.removeAnnotations(annotataions)
        
    }

添加大頭針并顯示地理信息 用到反地理編碼

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
    {
        //1. 根據當前的點的位置 獲得在地圖上面的坐標
        let point = touches.first?.location(in: mapkitView)
        //經緯度
        let coordinate = mapkitView.convert(point!, toCoordinateFrom: mapkitView)
        
        
        //2.創(chuàng)建一個大頭針
        let userAnnotation = : UserAnnotation = UserAnnotation()
          userAnnotation.title = "title"
          userAnnotation.subtitle = "  "
        userAnnotation.coordinate = coordinate
        
        //反地理編碼 取得位子信息
        geoCode.reverseGeocodeLocation(CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude))
        { (places, error) in
            if error == nil
            {
                let mark = places?.first
                userAnnotation.title = mark?.locality
                userAnnotation.subtitle = mark?.name
                self.mapkitView.addAnnotation(userAnnotation)

            }
        }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末伍纫,一起剝皮案震驚了整個濱河市宗雇,隨后出現的幾起案子赔蒲,更是在濱河造成了極大的恐慌良漱,老刑警劉巖母市,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異焕刮,居然都是意外死亡,警方通過查閱死者的電腦和手機括荡,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門溉旋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來观腊,“玉大人,你說我怎么就攤上這事梧油。” “怎么了褪子?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵嫌褪,是天一觀的道長笼痛。 經常有香客問我琅拌,道長,這世上最難降的妖魔是什么倘核? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任紧唱,我火速辦了婚禮漏益,結果婚禮上绰疤,老公的妹妹穿的比我還像新娘舞终。我一直安慰自己轻庆,他們只是感情好癣猾,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著余爆,像睡著了一般纷宇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛾方,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天像捶,我揣著相機與錄音,去河邊找鬼桩砰。 笑死拓春,一個胖子當著我的面吹牛,可吹牛的內容都是我干的亚隅。 我是一名探鬼主播硼莽,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枢步!你這毒婦竟也來了?” 一聲冷哼從身側響起渐尿,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤隘擎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后震桶,有當地人在樹林里發(fā)現了一具尸體蹲姐,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡凫岖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年爹土,在試婚紗的時候發(fā)現自己被綠了着饥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挪拟,靈堂內的尸體忽然破棺而出玉组,到底是詐尸還是另有隱情,我是刑警寧澤石景,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布筷黔,位于F島的核電站怠堪,受9級特大地震影響粟矿,放射性物質發(fā)生泄漏陌粹。R本人自食惡果不足惜或舞,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诈豌。 院中可真熱鬧矫渔,春花似錦、人聲如沸油够。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幸缕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栏尚,已是汗流浹背抬虽。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工咱圆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隘膘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像才漆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸳玩,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344