Swift 3.0基础框架快速开发开源框架(http://www.jianshu.com/p/0f950c180cb8)
版本说明:本文讲的内容所使用的是Xcode版本是7.2版本 Swift是2.1版本。
1.第一部申请百度开发者 如下图:申请成功
2.再次打开 http://lbsyun.baidu.com 选择->开发->IOS导航SDK 如下图:
3.导航的SDK已经下载完毕
演示SDK版本是V2.0.6
4.再次回到 http://lbsyun.baidu.com 选择申请密匙->创建应用
5.提交完成后是这样的
6.好了以上申请Key已经完成了,打开你的Xcode吧 创建你的IOS应用吧
------------------------这里是分割线--------------------------------
7.先做个简单的起点和终点的界面 如下图:
8.把下载好的SDK导入到当前Xcode工程下:如下图
8.此时我们的目录是这样的
9.我们运行下,看看能不能运行 如下图:
10.是不是一堆错误?怎么解决呢,跟我一步步做(导致错误的是因为ARC的原因,具体我也不懂)
11.是不是在运行,可以跑起来了?,既然可以跑起来了,那么我们就开始调用SDK导航了 , 首先先做个OC跟Swift桥接库(如何桥接 OC跟swift 这个百度吧 很多了 不一一介绍了), 现在我们的目录是这样的,运行一下,是不是一样可以运行,如果可以证明你步骤对了
#import "BNRoutePlanModel.h"
#import "BNCoreServices.h"
12.好了,我们在新建一个BaiduNavViewController.swift(来看看我们的结构)需要实现百度导航的协议 如下图:
import UIKit
class BaiduNavViewController: UIViewController, BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate{
var Begin_longitude:Double=0.0 //初始点X
var Begin_latitude:Double=0.0 //初始点Y
private var longitude=CLLocationDegrees() //初始点经度
private var latitude=CLLocationDegrees() //初始点纬度
override func viewDidLoad() {
super.viewDidLoad()
longitude = Begin_longitude //起点经度
latitude = Begin_latitude //起点纬度
}
//算路回调成功
func routePlanDidFinished(userInfo: [NSObject : AnyObject]!) {
}
//算路回调失败
func routePlanDidFailedWithError(error: NSError!, andUserInfo userInfo: [NSObject : AnyObject]!) {
}
//算路取消回调
func routePlanDidUserCanceled(userInfo: [NSObject : AnyObject]!) {
}
//退出导航
func onExitNaviUI(extraInfo: [NSObject : AnyObject]!) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
13.运行,是不是没有出错,如果没出错,继续跟上(在看看我们的代码已经变成这样了)
var services = BNCoreServices.GetInstance() //InitSDK
let NAVI_APP_KEY = "RbeSg6mnC784wVOfzI6WDtXj"
//初始化导航SDK
services.initServices(NAVI_APP_KEY)
services.startServicesAsyn({ () -> Void in
print("导航初始化成功")
}) { () -> Void in
print("导航初始化失败")
}
import UIKit
class BaiduNavViewController: UIViewController, BNNaviUIManagerDelegate,BNNaviRoutePlanDelegate{
var Begin_longitude:Double=0.0 //初始点X 经度
var Begin_latitude:Double=0.0 //初始点Y 纬度
var End_longitude:Double=0.0 //终点X 经度
var End_latitude:Double=0.0 //终点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) //启动导航
}
}
func startNav(longitude:Double ,latitude:Double,CurrentaddressX:Double ,CurrentaddressY:Double ){
let nodesArray:NSMutableArray = NSMutableArray(capacity: 2)
//起点 传入的是原始的经纬度坐标,若使用的是百度地图坐标,可以使用BNTools类进行坐标转化
let startNode:BNRoutePlanNode = BNRoutePlanNode()
startNode.pos = BNPosition()
//这里获取到当前的位置的经度纬度就可以了
startNode.pos.x = longitude//经度
startNode.pos.y = latitude //纬度
startNode.pos.eType = BNCoordinate_BaiduMapSDK
nodesArray.addObject(startNode)
//终点
let endNode:BNRoutePlanNode = BNRoutePlanNode()
endNode.pos = BNPosition()
endNode.pos.x = CurrentaddressX //经度
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 )
}
//算路回调成功
func routePlanDidFinished(userInfo: [NSObject : AnyObject]!) {
//路径规划成功,开始导航
let uiservice = BNCoreServices.UIService()
uiservice.showNaviUI(BN_NaviTypeReal, delegete: self, isNeedLandscape: true)
}
//算路回调失败
func routePlanDidFailedWithError(error: NSError!, andUserInfo userInfo: [NSObject : AnyObject]!) {
if (error.code == 100) {
print("获取地理位置失败")
}
else if (error.code == 102)
{
print("定位服务未开启")
}
}
//算路取消回调
func routePlanDidUserCanceled(userInfo: [NSObject : AnyObject]!) {
}
//退出导航
func onExitNaviUI(extraInfo: [NSObject : AnyObject]!) {
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
14.我们运行...一堆错误 100多个(什么情况坑我呢吧,别急,慢慢来😄)
15.开始解决我故意留下来最后的错误吧(其实是一开始忘记做那个步骤了...)😄
16.编译,是不是没错误了,基本上我们的程序差不多完成了,但是编译完程序崩溃了..(别急还有步骤)
17.还有个最最关键
18.好了 运行程序吧,没错误了,那么我们开始来运行导航了
首先先添加一个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!)! //初始点X 经度
baidunav.Begin_latitude=Double(Begin_latitude.text!)! //初始点Y 纬度
baidunav.End_longitude=Double(End_longitude.text!)! //终点X 经度
baidunav.End_latitude=Double(End_latitude.text!)! //终点Y 纬度
self.navigationController?.pushViewController(baidunav, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
20.好了,我们运行吧 已经完成了 (注:经度纬度可以在http://www.gpsspg.com/maps.htm 里面获取,如果做得灵活点可以通过定位来获取数据),我们来看看我们做出来的成果吧
TTS授权是语音功能 如需要请到http://lbsyun.baidu.com/index.php?title=ios-navsdk/guide/voice 申请授权
总算写完了...大功告成,如有什么改进,请在留言处留言。