Swift 3.0基礎(chǔ)框架快速開發(fā)開源框架(http://www.itdecent.cn/p/0f950c180cb8)
版本說明:本文講的內(nèi)容所使用的是Xcode版本是7.2版本 Swift是2.1版本。
1.第一部申請(qǐng)百度開發(fā)者 如下圖:申請(qǐng)成功

2.再次打開 http://lbsyun.baidu.com 選擇->開發(fā)->IOS導(dǎo)航SDK 如下圖:



3.導(dǎo)航的SDK已經(jīng)下載完畢
演示SDK版本是V2.0.6
4.再次回到 http://lbsyun.baidu.com 選擇申請(qǐng)密匙->創(chuàng)建應(yīng)用



5.提交完成后是這樣的

6.好了以上申請(qǐng)Key已經(jīng)完成了,打開你的Xcode吧 創(chuàng)建你的IOS應(yīng)用吧
------------------------這里是分割線--------------------------------
7.先做個(gè)簡(jiǎn)單的起點(diǎn)和終點(diǎn)的界面 如下圖:

8.把下載好的SDK導(dǎo)入到當(dāng)前Xcode工程下:如下圖



8.此時(shí)我們的目錄是這樣的

9.我們運(yùn)行下,看看能不能運(yùn)行 如下圖:

10.是不是一堆錯(cuò)誤?怎么解決呢,跟我一步步做(導(dǎo)致錯(cuò)誤的是因?yàn)锳RC的原因,具體我也不懂)

11.是不是在運(yùn)行,可以跑起來了?,既然可以跑起來了,那么我們就開始調(diào)用SDK導(dǎo)航了 , 首先先做個(gè)OC跟Swift橋接庫(如何橋接 OC跟swift 這個(gè)百度吧 很多了 不一一介紹了), 現(xiàn)在我們的目錄是這樣的,運(yùn)行一下,是不是一樣可以運(yùn)行,如果可以證明你步驟對(duì)了
#import "BNRoutePlanModel.h"
#import "BNCoreServices.h"

12.好了,我們?cè)谛陆ㄒ粋€(gè)BaiduNavViewController.swift(來看看我們的結(jié)構(gòu))需要實(shí)現(xiàn)百度導(dǎo)航的協(xié)議 如下圖:
import UIKit
class BaiduNavViewController: UIViewController, BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate{
var Begin_longitude:Double=0.0 //初始點(diǎn)X
var Begin_latitude:Double=0.0 //初始點(diǎn)Y
private var longitude=CLLocationDegrees() //初始點(diǎn)經(jīng)度
private var latitude=CLLocationDegrees() //初始點(diǎn)緯度
override func viewDidLoad() {
super.viewDidLoad()
longitude = Begin_longitude //起點(diǎn)經(jīng)度
latitude = Begin_latitude //起點(diǎn)緯度
}
//算路回調(diào)成功
func routePlanDidFinished(userInfo: [NSObject : AnyObject]!) {
}
//算路回調(diào)失敗
func routePlanDidFailedWithError(error: NSError!, andUserInfo userInfo: [NSObject : AnyObject]!) {
}
//算路取消回調(diào)
func routePlanDidUserCanceled(userInfo: [NSObject : AnyObject]!) {
}
//退出導(dǎo)航
func onExitNaviUI(extraInfo: [NSObject : AnyObject]!) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

13.運(yùn)行,是不是沒有出錯(cuò),如果沒出錯(cuò),繼續(xù)跟上(在看看我們的代碼已經(jīng)變成這樣了)
var services = BNCoreServices.GetInstance() //InitSDK
let NAVI_APP_KEY = "RbeSg6mnC784wVOfzI6WDtXj"
//初始化導(dǎo)航SDK
services.initServices(NAVI_APP_KEY)
services.startServicesAsyn({ () -> Void in
print("導(dǎo)航初始化成功")
}) { () -> Void in
print("導(dǎo)航初始化失敗")
}

import UIKit
class BaiduNavViewController: UIViewController, BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate{
var Begin_longitude:Double=0.0 //初始點(diǎn)X 經(jīng)度
var Begin_latitude:Double=0.0 //初始點(diǎn)Y 緯度
var End_longitude:Double=0.0 //終點(diǎn)X 經(jīng)度
var End_latitude:Double=0.0 //終點(diǎn)Y 緯度
override func viewDidLoad() {
super.viewDidLoad()
checkServicesInited(Begin_longitude,latitude: Begin_latitude,CurrentaddressX: End_longitude,CurrentaddressY: End_latitude)
}
//檢查引擎是否初始化完成
func checkServicesInited(longitude:Double ,latitude:Double ,CurrentaddressX:Double ,CurrentaddressY:Double){
services = BNCoreServices.GetInstance()
if(!services.isServicesInited()){ //檢查引擎是否初始化完成
print("引擎尚未初始化完成,稍后再試")
}else{
startNav(longitude,latitude: latitude,CurrentaddressX: CurrentaddressX,CurrentaddressY: CurrentaddressY) //啟動(dòng)導(dǎo)航
}
}
func startNav(longitude:Double ,latitude:Double,CurrentaddressX:Double ,CurrentaddressY:Double ){
let nodesArray:NSMutableArray = NSMutableArray(capacity: 2)
//起點(diǎn) 傳入的是原始的經(jīng)緯度坐標(biāo),若使用的是百度地圖坐標(biāo),可以使用BNTools類進(jìn)行坐標(biāo)轉(zhuǎn)化
let startNode:BNRoutePlanNode = BNRoutePlanNode()
startNode.pos = BNPosition()
//這里獲取到當(dāng)前的位置的經(jīng)度緯度就可以了
startNode.pos.x = longitude//經(jīng)度
startNode.pos.y = latitude //緯度
startNode.pos.eType = BNCoordinate_BaiduMapSDK
nodesArray.addObject(startNode)
//終點(diǎn)
let endNode:BNRoutePlanNode = BNRoutePlanNode()
endNode.pos = BNPosition()
endNode.pos.x = CurrentaddressX //經(jīng)度
endNode.pos.y = CurrentaddressY //緯度
endNode.pos.eType = BNCoordinate_BaiduMapSDK
nodesArray.addObject(endNode)
let GONav = BNCoreServices.RoutePlanService()
GONav.startNaviRoutePlan(BNRoutePlanMode_Highway, naviNodes: nodesArray as [AnyObject], time: nil, delegete: self, userInfo: nil )
}
//算路回調(diào)成功
func routePlanDidFinished(userInfo: [NSObject : AnyObject]!) {
//路徑規(guī)劃成功,開始導(dǎo)航
let uiservice = BNCoreServices.UIService()
uiservice.showNaviUI(BN_NaviTypeReal, delegete: self, isNeedLandscape: true)
}
//算路回調(diào)失敗
func routePlanDidFailedWithError(error: NSError!, andUserInfo userInfo: [NSObject : AnyObject]!) {
if (error.code == 100) {
print("獲取地理位置失敗")
}
else if (error.code == 102)
{
print("定位服務(wù)未開啟")
}
}
//算路取消回調(diào)
func routePlanDidUserCanceled(userInfo: [NSObject : AnyObject]!) {
}
//退出導(dǎo)航
func onExitNaviUI(extraInfo: [NSObject : AnyObject]!) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}


14.我們運(yùn)行...一堆錯(cuò)誤 100多個(gè)(什么情況坑我呢吧,別急,慢慢來??)

15.開始解決我故意留下來最后的錯(cuò)誤吧(其實(shí)是一開始忘記做那個(gè)步驟了...)??

16.編譯,是不是沒錯(cuò)誤了,基本上我們的程序差不多完成了,但是編譯完程序崩潰了..(別急還有步驟)

17.還有個(gè)最最關(guān)鍵

18.好了 運(yùn)行程序吧,沒錯(cuò)誤了,那么我們開始來運(yùn)行導(dǎo)航了
首先先添加一個(gè)navigationController 來看看我們Main.storyboard 的界面

19.在看看ViewController.swift 代碼
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var Begin_longitude: UITextField!
@IBOutlet weak var Begin_latitude: UITextField!
@IBOutlet weak var End_longitude: UITextField!
@IBOutlet weak var End_latitude: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
Begin_longitude.text=113.3684990000.description
Begin_latitude.text=23.1304880000.description
End_longitude.text=114.0661120000.description
End_latitude.text=22.5485150000.description
}
@IBAction func goNav(sender: AnyObject) {
let baidunav = BaiduNavViewController()
baidunav.Begin_longitude=Double(Begin_longitude.text!)! //初始點(diǎn)X 經(jīng)度
baidunav.Begin_latitude=Double(Begin_latitude.text!)! //初始點(diǎn)Y 緯度
baidunav.End_longitude=Double(End_longitude.text!)! //終點(diǎn)X 經(jīng)度
baidunav.End_latitude=Double(End_latitude.text!)! //終點(diǎn)Y 緯度
self.navigationController?.pushViewController(baidunav, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

20.好了,我們運(yùn)行吧 已經(jīng)完成了 (注:經(jīng)度緯度可以在http://www.gpsspg.com/maps.htm 里面獲取,如果做得靈活點(diǎn)可以通過定位來獲取數(shù)據(jù)),我們來看看我們做出來的成果吧

TTS授權(quán)是語音功能 如需要請(qǐng)到http://lbsyun.baidu.com/index.php?title=ios-navsdk/guide/voice 申請(qǐng)授權(quán)



總算寫完了...大功告成,如有什么改進(jìn),請(qǐng)?jiān)诹粞蕴幜粞浴?/p>