swift 實現(xiàn)應(yīng)用外導(dǎo)航

簡單介紹下如何使用 swift 實現(xiàn)跳轉(zhuǎn)到高德地圖、百度地圖、或系統(tǒng)自帶地圖導(dǎo)航,有了這個,媽媽再也不用擔(dān)心app里需要實現(xiàn)導(dǎo)航功能啦?????? 總結(jié)一下,高德地圖跳轉(zhuǎn)完直接開始導(dǎo)航,個人認(rèn)為體驗最好。百度地圖需要用戶手動確認(rèn)一下,也還不錯。自帶地圖加載略慢,????

//swift3.1
let alertController = UIAlertController(title: "選擇導(dǎo)航地圖", message: nil, preferredStyle: .actionSheet)
let cancelAction = UIAlertAction.init(title: "取消", style: .cancel) { (action) in
    
}
//系統(tǒng)自帶地圖,內(nèi)核高德地圖,無需判斷是否安裝
let appleAction = UIAlertAction(title: "自帶地圖", style: .default){ (action) in
    let currentLocation = MKMapItem.forCurrentLocation()
    let toLocation = MKMapItem.init(placemark: MKPlacemark.init(coordinate: view.annotation.coordinate, addressDictionary: nil))
    MKMapItem.openMaps(with: [currentLocation, toLocation],
                       launchOptions: [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
                                       MKLaunchOptionsShowsTrafficKey:true])
}
//百度地圖
if UIApplication.shared.canOpenURL(URL.init(string: "baidumap://")!) {//判斷是否安裝了地圖
    let baiduAction = UIAlertAction(title: "百度地圖", style: .default){ (action) in
        //注意:origin={{我的位置}}不要變;目的地隨便寫
        let urlString = "baidumap://map/direction?origin={{我的位置}}&destination=latlng:\(view.annotation.coordinate.latitude),\(view.annotation.coordinate.longitude)|name=目的地&mode=driving&coord_type=gcj02"
        let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        UIApplication.shared.openURL(URL.init(string: escapedString!)!)
    }
    alertController.addAction(baiduAction)
}
//高德地圖
if UIApplication.shared.canOpenURL(URL.init(string: "iosamap://")!) {
    let gaodeAction = UIAlertAction(title: "高德地圖", style: .default){ (action) in
        let urlString = "iosamap://navi?sourceApplication=隨便寫&backScheme=隨便寫&lat=\(view.annotation.coordinate.latitude)&lon=\(view.annotation.coordinate.longitude)&dev=0&style=2"
        let escapedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        UIApplication.shared.openURL(URL.init(string: escapedString!)!)
    }
    alertController.addAction(gaodeAction)
}

alertController.addAction(cancelAction)
alertController.addAction(appleAction)

present(alertController, animated: true, completion: nil)

info.plist中需要添加高德地圖、百度地圖為白名單:
在key:LSApplicationQueriesSchemes的array中增加下面兩項:


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

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

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