无UI导航的场景适用于不需要进入专业导航的场景,开发者可以初始化引擎后可以获取到当前导航MapView,添加到任何父视图上使用,开始导航后路线及相关导航元素会绘制到当前这个导航MapView上。
使用步骤:
无UI导航初始化时可以不传入controller参数。
BMKCycleNavigationManager *manager = [BMKCycleNavigationManager sharedManager];manager.routeGuidanceDelegate = self;manager.ttsPlayerDelegate = self;manager.managerDelegate = self;manager.calcRouteDelegate = self;manager.locationAuthorizationDelegate = self;///初始化步骑行导航引擎BOOL inited = [[BMKCycleNavigationManager sharedManager] initNaviEngine:nil options:nil];//发起算路//引擎初始化成功之后,发起导航算路,其中BMKCycleNaviLaunchParam的参数naviType用于指定是普通骑行导航或是电动车骑行导航。BMKCycleNaviLaunchParam *param = [[BMKCycleNaviLaunchParam alloc] init];param.naviType = BMK_WALK_CYCLE_NAVIGATION_TYPE_NORMAL_CYCLE;BMKCycleNaviRouteNodeInfo *startNode = [[BMKCycleNaviRouteNodeInfo alloc] init];startNode.location = _startAnnotation.coordinate; // 设置起点BMKCycleNaviRouteNodeInfo *endNode = [[BMKCycleNaviRouteNodeInfo alloc] init];endNode.location = _endAnnotation.coordinate; // 设置终点param.startNode = startNode;param.endNode = endNode;// 设置算路方式param.startNode.type = BMKWalkNavigationRouteNodeLocation;param.endNode.type = BMKWalkNavigationRouteNodeLocation;[[BMKCycleNavigationManager sharedManager] routePlanWithParams:param];
在算路回调成功过后,开始导航,无UI导航场景,开始导航的ParentController参数可以为nil,通过getNaviMap拿到当前导航的MapView使用。
#pragma mark - <BMKWalkNaviCalcRouteDelegate>/// 引擎算路结果- (void)onNaviCalcRouteResult:(BMKWalkCycleRoutePlanErrorCode)errorCode naviType:(BMKWalkCycleNavigationType)naviType {if (errorCode == BMK_WALK_CYCLE_ROUTEPLAN_RESULT_SUCCESS) {if (naviType == BMK_WALK_CYCLE_NAVIGATION_TYPE_WALK) {NSLog(@"startWalkNaviWithParentController");// ParentController可以为nil,可以获取到当前导航MapView,添加到任何父视图上使用[[BMKWalkNavigationManager sharedManager] startWalkNaviWithParentController:nil isPush:YES];BMKMapView *mapview = [[BMKWalkNavigationManager sharedManager] getNaviMap];mapview.frame = CGRectMake(0, 100, 200, 200);/// mapPadding用于设置地图的上左下右预留空间,避免地图logo或绘制元素被其他UI布局遮挡/// 必要时配合导航路线全览zoomToSpanInsets和小车偏移carPositionOffset接口使用mapview.mapPadding = UIEdgeInsetsMake(0,0,0,0);[self.view addSubview:mapview];} else {NSLog(@"startCycleNaviWithParentController");[[BMKCycleNavigationManager sharedManager] startCycleNaviWithParentController:nil isPush:YES];// ParentController可以为nil,可以获取到当前导航MapView,添加到任何父视图上使用BMKMapView *mapview = [[BMKCycleNavigationManager sharedManager] getNaviMap];mapview.frame = CGRectMake(0, 100, 200, 200);/// mapPadding用于设置地图的上左下右预留空间,避免地图logo或绘制元素被其他UI布局遮挡/// 必要时配合导航路线全览zoomToSpanInsets和小车偏移carPositionOffset接口使用mapview.mapPadding = UIEdgeInsetsMake(0,0,0,0);[self.view addSubview:mapview];}} else {NSLog(@"SDK-引擎算路失败 %ld", errorCode);}}
需要多路线的可以设置manager.enableMultiRoute = YES;或参考步骑行多路线算路文档。
无UI导航场景因为没有专业导航页面UI,就需要开发者通过接口控制导航引擎的整体流程及生命周期。
步骑行导航SDK提供以下接口,初始化引擎-算路-开始导航-暂停导航-恢复导航-结束导航-销毁单例;
/**单例全局访问点@return BMKCycleNavigationManager单例对象*/+ (instancetype)sharedManager;/**初始化引擎@param controller 目的导航控制器@param option 设置导航定制化参数。@return 引擎初始化结果*/- (BOOL)initNaviEngine:(UIViewController *)controller option:(BMKWalkCycleNavigationDisplayOption *)option;/// 初始化引擎 since 6.6.2/// @param controller 导航页面,由开发者提供。/// @param options 导航相关可选配置参数。/// @return 引擎初始化结果。- (BOOL)initNaviEngine:(UIViewController *)controlleroptions:(BMKWalkCycleNavigationOptions *)options;/**导航过程生命周期函数, 开始导航,since 6.5.2@controller 父controller,用于push或present@isPush 是否Push出新页面,YES:push;NO:present@return 开始导航结果*/- (BOOL)startCycleNaviWithParentController:(UIViewController *)controller isPush:(BOOL)isPush;/// 退出骑行专业导航,等同于点击骑行专业导航退出按钮,since 6.5.8- (void)exitCycleNomalNavi;/**导航过程生命周期函数, 暂停导航*/- (void)pause;/**导航过程生命周期函数, 恢复导航*/- (void)resume;/**导航过程生命周期函数, 结束导航*/- (void)stop;/**销毁单例*/+ (void)destroy;
以下是不同时机可以使用的接口
建议引擎初始化前使用:(包含所有代理回调,都建议初始化引擎前设置)
/// 导航时是否支持手机传感器方向信息,默认YES@property (nonatomic, assign) BOOL supportHeading;
仅引擎初始化后算路前使用:
/// 设置导航是否显示红路灯倒计时,引擎初始化成功后调用,默认:NO,有高级权限时默认YES,since 6.6.2@property (nonatomic, assign) BOOL showRedGreenLight;/// 设置默认比例尺,默认:19,范围:4~22,since 6.6.4@property (nonatomic, assign) float defaultNaviMapLevel;
支持导航中动态设置的接口:(以下接口算路前也可以设置)
/// 路线全览区域在mapview上的insets,since 6.5.8@property (nonatomic, assign) UIEdgeInsets zoomToSpanInsets;/// 设置导航地图旋转模式,默认:BMKNaviMapRotateModeRoute 路线朝上,since 6.6.2@property (nonatomic, assign) BMKNaviMapRotateMode naviMapRotateMode;/// 设置导航地图俯仰视角模式,默认:BMKNaviMapOverlookingMode2D 2d视角,since 6.6.2@property (nonatomic, assign) BMKNaviMapOverlookingMode naviMapOverlookingMode;/// 设置导航是否全览状态,默认:NO 导航态,,since 6.6.2@property (nonatomic, assign) BOOL naviMapViewAllStatus;/// 小车XY偏移量,默认无效值(MAXFLOAT, MAXFLOAT),初始化引擎后设置,since 6.6.4@property (nonatomic, assign) CGPoint carPositionOffset;/// 导航设置选项,初始化导航后设置,支持路口放大效果设置@property (nonatomic, strong) BMKWalkCycleNaviSettingManager *naviSettingManager;
以下接口支持动态设置导航元素的隐藏显示和自定义
#pragma mark - 导航元素控制/// 导航元素显示控制,包括:引导红线,红绿灯标签,红绿灯倒计时气泡,路名气泡,交通设施标签,交通设施气泡,里程碑标签等/// - Parameters:/// - show: YES:显示;NO:隐藏/// - elements: 显示/隐藏的元素,可支持元素类型参考:BMKNaviDrawElementType/// 如:@[@(BMKNaviDrawElementTypeRedLine), @(BMKNaviDrawElementTypeTrafficLight), @(BMKNaviDrawElementTypeTrafficLightPop)]- (void)setNaviDrawElementsShow:(BOOL)show elements:(NSArray *)elements;/// 更新导航元素自定义样式/// 包括罗盘、定位点(小车)、终点图片及图片尺寸缩放;路线未走过和已走过纹理、线宽;路名字体大小、颜色;路名气泡字体大小、颜色及背景色/// - Parameters:/// - dispalyOption: 自定义主导航实例元素自定义样式(这里自定义多实例的元素样式不会生效)- (void)updateNaviDrawItemDisplayOption:(BMKWalkCycleNaviDrawItemDisplayOption *)dispalyOption;
导航元素自定义样式除了动态设置,也支持在引擎初始化时使用引擎初始化接口的options设置:BMKWalkCycleNavigationOptions->BMKWalkCycleNavigationDisplayOption->BMKWalkCycleNaviDrawItemDisplayOption。
/// 初始化引擎 since 6.6.2/// @param controller 导航页面,由开发者提供。/// @param options 导航相关可选配置参数。/// @return 引擎初始化结果。- (BOOL)initNaviEngine:(UIViewController *)controlleroptions:(BMKWalkCycleNavigationOptions *)options;
上一篇
下一篇