导航有两种模式,分别是轻导航和专业导航
轻导航页面,首先需要添加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 {[super viewWillAppear:animated];[BNaviService_LightNavi viewWillAppear:self.view];}- (void)viewDidAppear:(BOOL)animated {[super viewDidAppear: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用户信息
上一篇
下一篇
本篇文章对您是否有帮助?