轻导航是一种轻量级的导航模式,在该模式下,整个导航过程具体表现如下
(1)播报:没有语音播报,只有部分提示音(比如过路口,超速等)
(2)路线:一直保持全览状态
(3)诱导信息:提供简易诱导、剩余时间距离等信息 在开发模式上,该模块具有很好的灵活性,整个模块只提供了一张底图,其他的上层ui可以由开发者进行定制。 具体效果图如下
使用轻导航前必须先算路,算路支持驾车和货车算路,示例代码如下:
-(void)startrouteplan {nsarray*nodesarray =[self getnodes];if([self.navitype isequaltostring:@"truck"]){///货车算路,userinfo传bnavitriptypekey key可以设置货车导航[bnaviservice_routeplan startnavirouteplan:self.planmodel navinodes:nodesarray time:nil delegete:self userinfo:@{bnavitriptypekey: @(bn_navitypetruck)}];}else{///驾车算路,userinfo不传默认为驾车算路[bnaviservice_routeplan startnavirouteplan:self.planmodel navinodes:nodesarray time:nil delegete:self userinfo:nil];}}
算路完成后,可以在算路完成的回调里选择某条路线后,然后开始轻导航:
-(void)routeplandidfinished:(nsdictionary*)userinfo {bncarroutemodel*routemodel = userinfo[bndriveroutedatakey];//选择最后一条路线nsinteger selectrouteindex = routemodel.carroutes.count-1;[bnaviservice_routeplan selectrouteindex:selectrouteindex completion:^{//选路完成后再开始轻导航[bnaviservice_lightnavi startlightnavi];}];}
当退出轻导航页面时,需要退出轻导航,调用如下:
[bnaviservice_lightnavi stoplightnavi];
轻导航过程中路线一直处于全览状态,路线在底图上的全览区域可以由开发者设置,调用如下:
/// @param insets 路线全览区域在mapview上的insets-(void)zoomtospan:(uiedgeinsets)insets;
用户挪动地图后,路线处于一个非全览的状态,隔一段时间后,轻导航的路线具备自动全览的功能,时间间隔可以由开发者进行设置:
/// 自动回车位的间隔,单位为秒,默认为60秒@property(nonatomic, assign)nsinteger autoreturncarduration;
在底图即将显示到屏幕上的时候调用
/// 轻导航底图即将显示,在viewwillappear中或者轻导航视图即将显示时调用/// @param parentview mapview的父view-(void)viewwillappear:(uiview*)parentview;
在底图即将在屏幕上消失的时候调用
/// 轻导航底图即将消失,在viewwilldisappear中或者轻导航视图即将隐藏调用/// @param parentview mapview的父view-(void)viewwilldisappear:(uiview*)parentview;
轻导航到达终点后,底图上的路线默认隐藏并删除,如果希望能够继续显示,可以设置该值为no。
/// 轻导航中到达终点后是否自动删除路线,默认是yes@property(nonatomic, assign)bool deleteroutewhenarrivedestination;
轻导航支持单路线和多路线
可以有2种方式实现单路线和多路线,所谓单路线(多路线),也即在轻导航中显示的路线是单条还是多条。
可以有2种方式实现单路线和多路线的设置:
(1)算路前设置
/// 是否开启多路线,需要在算路前设,默认yes@property(nonatomic, assign)bool enablemultiroute;调用示例:[bnaviservice_strategy setenablemultiroute:yes];
(2)算路完成后开始轻导航前设置
//是否显示多路线-(void)showmultiroute:(bool)show;调用示例:[bnaviservice_routeplan showmultiroute:no];
轻导航中的3tab如图所示(这部分的数据在回调中给出)。当用户选择某个tab时,
对应的路线需要随着高亮,可以调用如下接口高亮路线:
/// 根据返回的3tab数据序号选路/// @param routeindex 3tab数据bnlightroutesmodel中routesinfo数组的下标-(void)selectroutewithroutedetailindex:(nsinteger)routeindex;
如果开发者需要知道当前哪个序号的tab高亮,可以调用如下接口:
/// 获取当前3tab数据哪个高亮-(nsinteger)getselecroutedetailindex;
在轻导航中,点击导航按钮,切换到专业导航,需要调用sdk如下接口进行切换:
/// 从轻导航切换到专业导航(包括从驾车轻导航切换到驾车专业导航,货车轻导航切换到货车专业导航)/// @param presentvc present专业导航页面的viewcontroller/// @param navitype 切换到哪种类型的专业导航,从货车轻导航切换到货车专业导航,传@"truck",从驾车轻导航切换到驾车专业导航,传@"car"-(bool)switchtorealnav:(uiviewcontroller*)presentvc withnavitype:(nsstring*)navitype;
在轻导航中,设置了delegate,就可以接受到轻导航中的各种事件回调。
/// bnlightnavimanager的delegate,接收事件回调@property(weak, nonatomic) id<bnlightnavimanagerdelegate> delegate;
(1)路线全览区域
sdk内部有一些情况会自动进行路线全览,路线的全览区域可以由开发者实现如下回调设置。
/// sdk内部偏航时进行路线全览,会回调外部这个接口,如果没有实现,使用上一次调用的zoomtospan:的参数,如果没有调用 过zoomtospan:,则为{0,0,0,0}-(uiedgeinsets)zoomtospaninsets;
(2)主线变化
主线是指轻导航判断的用户当前行驶的路线(也即高亮的路线)。当用户实际行驶的路线和当前路线不一致(比如偏航),主线会自动发生变化,向开发者回调以下信息。
/// 主线变化后的回调/// @param carroutemodel 偏航成功后的路线数据,可以从carroutemodel.tipsinfogroup中获取限行信息-(void)onhandledrivingroutechange:(bncarroutemodel*)carroutemodel;
(3)轻导航3tab数据变化回调在轻导航中,轻导航的3tab数据变化时,有如下回调:
/// 轻导航3tab数据变化回调/// @param model 数据model-(void)onhandleroutedetailchange:(bnlightroutesmodel*)model;
(4)路线点击回调
当用户点击底图上的某条路线时,会有如下回调,开发者可以根据需要高亮3tab中的某个tab。
/// 点击底图路线后的回调/// @param routedetailindex bnlightroutesmodel中序号变化的回调-(void)onhandleclickroute:(nsinteger)routedetailindex;
(1)简易诱导信息
简易诱导信息包含转向标类型、下一路口名称、距离下一路口距离等信息。
/// 诱导信息显示/更新的回调/// @param simpleguideinfo 需要显示/更新的诱导信息-(void)onhandlesimpleguideinfo:(bnavisimpleguideinfo*)simpleguideinfo;
在路线发生变化时(比如偏航),简易诱导信息需要隐藏,有如下回调:
/// 诱导信息隐藏的回调-(void)onhandlesimpleguideinfohide;
(2)eta信息回调
一次轻导航过程中,全程剩余时间、剩余距离回调如下:
/// 剩余时间、距离更新的回调/// @param remaininfo 剩余时间、距离的model-(void)onhandleremaininfo:(bnaviremaininfo*)remaininfo;
轻导航中各种状态变化回调如下:
/// 导航中各种状态/// @param navistatusinfo 开始导航、导航结束-(void)onhandlenavistatuschange:(bnavistatusinfo*)navistatusinfo;
其中导航中的状态包括如下:
typedef enum _bnavistatus_type_enum{bnavistatus_type_invalid,// 无效值 - invalidbnavistatus_type_beginnavi,// 导航开始 - start navigationbnavistatus_type_beginyaw,// 开始偏航 - start yawingbnavistatus_type_rerouteend,// 偏航成功 - finish yawingbnavistatus_type_reroutecarfree,// 车标自由状态bnavistatus_type_end1,// 接近目的地 - near the destinationbnavistatus_type_end2,// 到达目的地 - reach to the destinationbnavistatus_type_exactguide,//模糊引导绑定linkbnavistatus_type_fakeyawing,//静默偏航}bnavistatus_type_enum
从轻导航进入导航后,会有如下几个回调:
(1)从导航中切换回轻导航失败
如果出现失败,开发者需要重新发起算路,并开始轻导航
/// 从导航中切换回轻导航失败的回调,开发者需要重新算路并开始轻导航-(void)onhandleswitchtolightnavifail;
(2)退出专业导航
如果出现失败,开发者需要重新发起算路,并开始轻导航
/// 退出导航的回调/// @param params 预留参数,目前传nil-(void)onhandleexitnavi:(nsdictionary*)params;
(3)专业导航viewdidload
进入专业导航,当导航中的viewcontroller执行viewdidload时,会回调以下函数。
/// 专业导航中暴露出来的view-(void)onhandlenaviviewdidload:(uiview*)naviview;
上一篇
下一篇
本篇文章对您是否有帮助?