导航有两种模式,分别是轻导航和专业导航
轻导航页面,首先需要添加share location事件监听,然后setroutemargin, margin主要是指路线的显示范围,设置后会在轻导航中自动设置路线全览。 接着需要添加三个页面生命周期函数,分别在视图的viewdidload, viewwillappear, viewdidappear中调用,如下:
-(void)viewdidload {[super viewdidload];bnaviservice_strategy.bottombuttonheight=90;[bnaviservice_sharelocation addsharelocationlistener:self];//先设置margin[self setroutemargin];//再调用viewdidload[bnaviservice_lightnavi viewdidload:self.view];}-(void)viewwillappear:(bool)animated {[superviewwillappear:animated];[bnaviservice_lightnavi viewwillappear:self.view];}-(void)viewdidappear:(bool)animated {[superviewdidappear:animated];[bnaviservice_lightnavi viewdidappear:self.view];}//当订单状态变化时,需要调用[bnaviservice_sharelocation updateorder:self.order.orderidorderstate:self.order.orderstate];///订单结束后,需要移除sharelocation事件监听-(void)finiorder {[self setorderstate:bnordderstate_finish];[bnaviservice_sharelocation removesharelocationlistener:self];}
sharelocation相关回调
/**剩余时间和距离变化的消息@param remaininfo @{@"remaindist":@(remaindist),@"remaintime":@(remaintime)}*/-(void)onhandleremaininfo:(nsdictionary*)remaininfo {}//到达终点-(void)onhandlearrivedestination{}//算路失败-(void)onhandlerouteplanfail:(nserror*)error{//这里实现了一个简单的重试机制,算路失败后10s后重试,首汽可以自行实现[self.rerouteplanmanager rerouteplan];}
其中算路失败的回调demo中实现了一个10s重试的类,开发者可以自行实现。
在轻导航页面,点击导航按钮,可以调用以下接口:
其中routeplanbegin和routeplancompletion只有在进入导航时,还没算路成功才会有回调,如果进入导航时,在轻导航页面已经算路成功了,则直接进入。
__weak typeof(self) weakself = self;bool ret =[bnaviservice_normalnavi shownormalnaviui:self delegate:self extparam:nil routeplanbegin:^{[weakself showloading];} routeplancompletion:^(bool success){[weakself hideloading];if(!success){[weakself showalertwithtitle:@"错误"withcontent:@"算路失败"];}}];if(!ret){[self showalertwithtitle:@"错误"withcontent:@"进入导航失败"];}
注意,如果有实现算路失败重试机制,并且要延迟算路,需要先取消延迟算路重试。
//取消重试重算路操作,如果已经在重新算路中if(_rerouteplanmanager){[_rerouteplanmanager cancelrerouteplan];_rerouteplanmanager = nil;}
(1)进入导航入口
/**显示正常导航ui@param presentingviewcontroller 把导航控制器present出来的viewcontroller@param delegate 委托@param params 额外参数,先预留@param beginblock 进入导航有可能需要发起算路(在轻导航页面如果没有路线,进入导航需要发起算路),这里需要显示loading框@param completionblock 算路结果,隐藏loading框,如果失败的话,可以给用户提示@return 是否成功*/-(bool)shownormalnaviui:(uiviewcontroller*)presentingviewcontrollerdelegate:(id<bnnormalnavidelegate>)delegateextparam:(nsdictionary*)paramsrouteplanbegin:(dispatch_block_t)beginblockrouteplancompletion:(bnavirouteplancompletionblock)completionblock;
参数说明:
presentingviewcontroller把导航控制器present出来的viewcontrollerdelegate委托,选传params额外参数,选传 @{bn_exitnavicontinuelightnavi_key:@(yes/no)}具体的参数如下:bn_exitnavicontinuelightnavi_key:退出导航是否继续轻导航,默认是yes,如果退出导航需要基线轻导航可以不传beginblock进入导航有可能需要发起算路,这里需要显示loading框completionblock算路结果,隐藏loading框,如果失败的话,可以给用户提示
使用模板:
[bnaviservice_normalnavi shownormalnaviui:self delegate:self extparam:nil routeplanbegin:^{[weakself showloading];} routeplancompletion:^(bool success){[weakself hideloading];if(!success){[weakself showalertwithtitle:@"错误"withcontent:@"算路失败"];}}];
(2)导航页面加载完之后的回调,可以在其中添加自定义的视图,实现在代理controller
/**导航中控制器视图加载结束之后的回调*/-(void)onhandlenaviviewdidload:(uiview*)naviview;
参数说明:
naviview导航中提供可自定义添加视图的父视图,大小为整个屏幕
(3)退出导航相关回调,实现在代理controller
/**退出导航ui的回调@param param 预留参数,目前传nil*/-(void)onhandleexitnaviui:(nsdictionary*)param;
参数说明:
param预留参数,目前传nil
(1)根据当前的算路偏好发起重算路
/*** 适用当前的算路偏好重新算路*/-(void)startrecalculateroute;
使用模板:
bnaviservice_strategy.routeprefrence=bnavirouteprefrence_distless;(距离优先算路)[bnaviservice_routeplan startrecalculateroute];
(2)单/多路线算路设置(显示多条路线还是单条路线)
/**是否开启多路线,在算路前调用(设置订单为待服务状态前)@param enable 是否开启*/-(void)enablemultiroute:(bool)enable;
参数说明:
enable是否开启多路线算路
使用模板:
[bnaviservice_routeplan enablemultiroute:yes];
(3)算路成功回调,在bnrouteplandelegate代理内实现
/*** 算路成功回调** @param userinfo 用户信息*/-(void)routeplandidfinished:(nsdictionary*)userinfo;
参数说明:
userinfo用户信息
(4)算路失败回调,在bnrouteplandelegate代理内实现
/*** 算路失败回调** @param error 失败信息* @param userinfo 用户信息*/-(void)routeplandidfailedwitherror:(nserror*)erroranduserinfo:(nsdictionary*)userinfo;
参数说明:
error失败信息userinfo用户信息
上一篇
下一篇
本篇文章对您是否有帮助?