路线结果页可以把路线规划的信息进行展示,整个路线结果页除了底图外,其他的上层ui都是可以自定义的,开发者可以根据路线信息进行自定义开发。路线结果页相关的接口和回调在bndriverouteprotocol.h头文件中。
路线结果页对外暴露的接口在bndriverouteprotocol中,具体的接口如下:
@protocol bndriverouteprotocol<nsobject>/**路线结果页面相关事件回调的delegate*/@property(nonatomic, weak) id<bndriveroutemanagerdelegate> delegate;/**全览路线@param margin 需要显示的路线范围的margin@param animated 全览是否需要动画*/-(void)showrouteviewall:(bnmargin)margin animated:(bool)animated;/**选中路线,调用该接口后,同时会高亮该路线@param routeindex 路线序号(从0开始)*/-(void)selectrouteatindex:(nsuinteger)routeindex;/**驾车路线页即将显示,在viewwillappear中调用@param parentview mapview的父view*/-(void)viewwillappear:(uiview*)parentview;/**驾车路线页即将消失,在viewwilldisappear中调用@param parentview mapview的父view*/-(void)viewwilldisappear:(uiview*)parentview;/*打开定位,驾车页算路成功后需要打开定位才能显示车标*/-(void)startupdatelocation;/*关闭定位*/-(void)stopupdatelocation;/*获取当前路线信息@return 当前路线信息 包含城市信息(cityname,citycode)*/-(bncarroutemodel*)getcurrentcarroutedata;/**销毁bndriveroutemanager相关资源*/-(void)destory;@end
路线结果页相关的回调如下:
@protocol bndriveroutemanagerdelegate<nsobject>/**用户在地图上点击了某条路线(如果需要高亮该路线,要调用selectrouteatindex:接口)@param routeindex 路线序号(从0开始)*/-(void)onhandletouchrouteatindex:(nsuinteger)routeindex;/**回调车点@param positioninfo 车点信息*/-(void)onhandleupdatecurrentcarpositioninfo:(nsdictionary*)positioninfo;@end
下面介绍如何自定义路线结果页,进入和退出导航需要调用的接口。详细可以参考demo工程中的drivepageviewcontroller类的实现。
在视图控制器的viewwillappear:和viewwilldisappear:中添加底图,代码如下:
-(void)viewwillappear:(bool)animated {[superviewwillappear:animated];[bnaviservice_driveroute viewwillappear:self.view];}-(void)viewwilldisappear:(bool)animated {[superviewwilldisappear:animated];[bnaviservice_driveroute viewwilldisappear:self.view];}
发起路线规划,代码如下:
-(void)startrouteplan {[bnaviservice_routeplan startnavirouteplan:bnrouteplanmode_recommend navinodes:self.nodes time:nil delegete:self userinfo:@{bnavitriptypekey: @(self.navitye)}];}
算路成功后,可以进行以下操作,开发者可以根据自己的实际情况进行处理:
(1)选择路线:默认选择序号为0的路线,开发者也可以选择其他的路线,选中的路线会高亮。
(2)路线全览:把路线全览到屏幕的某个区域。
(3)获取路线数据,根据路线数据刷新ui,算路成功后的数据结构参考bncarroutemodel类。
(4)开启定位,开启后才能显示车标。
具体代码如下:
-(void)routeplandidfinished:(nsdictionary*)userinfo {//获取路线数据bncarroutemodel*route = userinfo[bndriveroutedatakey];nsinteger routecount = route.carroutes.count;//路线序号从0开始,这里选择序号为1的路线nsinteger selectindex =1< routecount ?1:0;//选择某条路线[bnaviservice_driveroute selectrouteatindex:selectindex];//把路线全览到某个区域[bnaviservice_driveroute showrouteviewall:margin animated:yes];//刷新ui[self updateui];// 算路成功后需要打开定位才能显示车标[bnaviservice_driveroute startupdatelocation];}
用户点击底图上的某条路线后,选中的路线会高亮,同时对外有如下回调,开发者可以在该回调中处理路线高亮后的ui刷新。
/**用户在地图上点击了某条路线(如果需要高亮该路线,要调用selectrouteatindex:接口)@param routeindex 路线序号(从0开始)*/-(void)onhandletouchrouteatindex:(nsuinteger)routeindex;
从驾车页进入导航页前需要先停止驾车页的定位监听,然后通过发起导航跳转到导航页。
-(void)enternavipage {[bnaviservice_driveroute stopupdatelocation];[bnaviservice_ui showpage:bnaviui_normalnavi delegate:self extparams:@{bnaviui_normalnavi_typekey: @(self.navitye)}];}
可以在以下回调中处理从专业导航中退出,回到路线结果页。具体操作包括:
(1)设置路线全览
(2)重新开启定位
(3)获取当前的路线数据,刷新ui
具体代码如下:
/*** 即将退出ui的回调** @param pagetype ui类型* @param extrainfo 额外参数*/-(void)willexitpage:(bnaviuitype)pagetype extrainfo:(nsdictionary*)extrainfo {//路线全量[bnaviservice_driveroute showrouteviewall:margin animated:yes];//开启定位[bnaviservice_driveroute startupdatelocation];//获取路线数据,刷新uibncarroutemodel*route =[bnaviservice_driveroute getcurrentcarroutedata];[self updateui];}
算路完成后,可以获取到路线的限行信息,限行信息在黄条数据结构里,bncarroutedata.h头文件中,具体如下:
/// 单个小黄条数据结构@interfacebnyellowtipsinfo:nsobject/// 小黄条标题@property(nonatomic, copy)nsstring*title;@end
上一篇
下一篇
本篇文章对您是否有帮助?