开发 iOS 导航SDK 开发指南 导航组件 高级功能

高级功能 最后更新时间: 2021年01月22日

配置类 - 逻辑相关

导航组件的配置类AMapNaviCompositeUserConfig提供了强大的设置选项,除了基础功能里描述的设置起终点车辆信息,还有如下设置

  • 设置导航组件启动时,是否直接进入导航界面,进行算路并自动开始导航。需要注意的是,如果设置为YES,为了保证算路成功,还需设置有效的终点,否则会报错。
/**
 * @brief 设置导航组件启动时,直接进入导航界面(跳过路径规划页面)进行算路并自动开始导航. since 5.3.0
 * @param directly 是否直接进入导航界面, 默认值为NO. 注意:如果为YES,为了保证算路成功,还需设置有效的终点,否则会报错
 */
- (void)setStartNaviDirectly:(BOOL)directly;
  • 设置导航组件界面dismiss时,是否调用停止导航和销毁AMapNaviDriveManager的单例,接口如下:
/**
 * @brief 设置导航组件界面dismiss时,是否调用 [AMapNaviDriveManager destroyInstance] 来尝试销毁 AMapNaviDriveManager 的单例. since 5.4.0
 * @param need 是否尝试销毁 AMapNaviDriveManager 的单例,默认为YES.
 */
- (void)setNeedDestoryDriveManagerInstanceWhenDismiss:(BOOL)need;

我们知道,导航SDK的驾车导航管理类AMapNaviDriveManager是一个单例,导航组件内部也是基于该单例进行路径规划和导航的,开发者也可以同时使用该单例进行事件和数据监听。如果您设置了NO,在退出导航组件的时候,内部不会调用停止导航和销毁AMapNaviDriveManager单例,您可以继续保持本次导航。该接口常用于司乘同显场景。 

  •  设置导航组件启动时,是否需要进行路径规划. 注意:此设置只有在-setStartNaviDirectly: 为YES时,才起作用。该设置一般用在如下场景:已经使用了AMapNaviDriveManager规划好路线,想直接使用此路线进行导航,也就是只想使用导航组件导航界面的“图面能力”。 
/**
 * @brief 设置导航组件启动时,是否需要进行路径规划. 此设置只有在setStartNaviDirectly为YES时,才起作用. since 5.4.0
 * @param need 是否需要进行路径规划,默认为YES. 如果为NO,导航组件启动时将不再进行算路,直接使用 AMapNaviDriveManager 单例已经规划好的路径进行导航
 */
- (void)setNeedCalculateRouteWhenPresent:(BOOL)need;
  •  设置当退出实时导航时,是否弹出“确认退出导航”的AlertView. 
/**
 * @brief 设置当退出实时导航时,是否弹出“确认退出导航”的AlertView. since 5.5.0
 * @param need 是否弹出“确认退出导航”的AlertView,默认为YES.
 */
- (void)setNeedShowConfirmViewWhenStopGPSNavi:(BOOL)need;
  •  设置驾车路径规划策略. 注意:如设置,将清空用户之前选择的值。如不设置,则取用户之前选择的值,如用户之前无选择过,则取 AMapNaviDrivingStrategyMultipleDefault 
/**
 * @brief 设置驾车路径规划策略. 注意:如设置,将清空用户之前选择的值。如不设置,则取用户之前选择的值,如用户之前无选择过,则取 AMapNaviDrivingStrategyMultipleDefault . since 6.1.0
 * @param driveStrategy 参考 AMapNaviDrivingStrategy .
 */
- (void)setDriveStrategy:(AMapNaviDrivingStrategy)driveStrategy;
/**
 * @brief 设置多路线导航模式(实时导航中拥有若干条备选路线供用户选择,默认模式), 或单路线导航模式. 注意: 1、设置的导航模式会在下一次主动路径规划时生效. 2、多路线导航模式还需同时满足以下4个条件才能够生效:a.路径规划时 AMapNaviDrivingStrategy 需选用多路径策略; b.起终点的直线距离需<=80KM; c.不能有途径点; d.车辆不能是货车类型. since 6.3.0
 * @param multipleRouteNaviMode YES:多路线导航模式, NO:单路线导航模式. 默认为YES.
 */
- (void)setMultipleRouteNaviMode:(BOOL)multipleRouteNaviMode;
  • 设置一个ViewController,SDK内部会使用该ViewController来present导航组件
/**
 * @brief 设置一个 ViewController,SDK内部会使用该 ViewController 来 present 导航组件. since 7.2.0
 * @param presenterViewController SDK会使用该对象来 present 导航组件
 */
- (void)setPresenterViewController:(UIViewController *_Nonnull)presenterViewController;

配置类 - UI相关 

AMapNaviCompositeUserConfig关于UI的配置有如下设置选项。

  • 主题皮肤类型,导航组件一共有3种主题皮肤可选择,接口和效果图如下所示。
/**
 * @brief 设置导航组件的主题皮肤类型. since 5.4.0
 * @param themeType 主题皮肤类型,默认为 AMapNaviCompositeThemeTypeDefault(蓝色),参考 AMapNaviCompositeThemeType .
 */
- (void)setThemeType:(AMapNaviCompositeThemeType)themeType;


  • 添加自定义View,导航组件的导航界面一共提供了3个地方可供您传入自定义View。

第一处自定义View会显示在界面的底部区域,容器View的宽度为屏幕宽度减去133,高度为46,接口和效果如下所示:

/**
 * @brief 设置驾车导航界面自定义View,该View将显示在界面的底部区域,容器View的宽度为屏幕宽度减去133,高度为46. since 6.1.0
 * @param customView 将被显示在底部区域的自定义view
 */
- (void)addCustomViewToNaviDriveView:(UIView *_Nonnull)customView;

第二处自定义View宽度为63,高度为53,会显示在界面的左侧靠边垂直中心区域,接口和效果如下所示:

/**
 * @brief 设置驾车导航界面左侧自定义View,该View宽度为63,高度为53,将显示在界面的左侧靠边垂直中心区域. since 6.9.0
 * @param customView 将被显示的自定义view
 */
- (void)addLeftCustomViewToNaviDriveView:(UIView *_Nonnull)customView;

第三处自定义View会显示在界面的底部区域之下,容器View的宽度为屏幕宽度,高度最高为200。注意:设置了该自定义View,导航界面将自动设置为不支持横屏。接口和效果如下所示: 

/**
 * @brief 设置驾车导航界面自定义View,该View将显示在界面的底部区域之下,容器View的宽度为屏幕宽度,高度最高为200. 注意: 设置了自定义View,导航界面将自动设置为不支持横屏 since 6.1.0
 * @param customBottomView 将被显示在底部区域之下的自定义view
 * @return 是否设置成功(高度超过200将会返回NO)
 */
- (BOOL)addCustomBottomViewToNaviDriveView:(UIView *_Nonnull)customBottomView;
/**
 * @brief 设置驾车导航时是否显示路口放大图. since 6.1.0
 * @param need 是否显示路口放大图,默认为YES.
 */
- (void)setShowCrossImage:(BOOL)need;

配置类 - 图面相关

AMapNaviCompositeUserConfig关于图面的配置有如下设置选项。

/**
 * @brief 设置驾车导航界面到达目的地后是否移除路线和牵引线. since 5.5.0
 * @param need 是否移除,默认为NO.
 */
- (void)setRemovePolylineAndVectorlineWhenArrivedDestination:(BOOL)need;
  • 地图是否展示实时路况。
/**
 * @brief 设置地图是否展示实时路况. since 6.6.0
 * @param need 是否显示,默认为YES.
 */
- (void)setMapShowTraffic:(BOOL)need;
/**
 * @brief 设置导航界面地图的日夜模式. since 7.1.0
 * @param type 参考 AMapNaviViewMapModeType . 默认为 AMapNaviViewMapModeTypeDayNightAuto(自动切换模式)
 */
- (void)setMapViewModeType:(AMapNaviViewMapModeType)type;
/**
 * @brief 设置导航界面跟随模式. since 7.1.0
 * @param mode 参考 AMapNaviViewTrackingMode . 默认为 AMapNaviViewTrackingModeCarNorth(车头朝上)
 */
- (void)setTrackingMode:(AMapNaviViewTrackingMode)mode;
/**
 * @brief 设置比例尺智能缩放. since 7.1.0
 * @param autoZoomMapLevel 锁车模式下是否为了预见下一导航动作自动缩放地图. 默认为YES
 */
- (void)setAutoZoomMapLevel:(BOOL)autoZoomMapLevel;

添加自定义Annotation和Overlay

和AMapNaviDriveView一样,导航组件也提供了添加了自定义Annotation和Overlay的方法,更多信息可参考添加自定义Annotation和Overlay。具体使用方法也可参考官方Demo——导航组件添加自定义overlay

/**
 * @brief 在驾车导航界面添加自定义标注. 注意:每次退出导航之后,标注都会被清空. since 5.5.0
 * @param annotation 会被显示在驾车导航界面地图上, 具体参考 AMapNaviCompositeCustomAnnotation .
 */
- (void)addAnnotation:(AMapNaviCompositeCustomAnnotation *_Nonnull)annotation;

/**
 * @brief 移除驾车导航界面的自定义标注. since 5.5.0
 * @param annotation 具体参考 AMapNaviCompositeCustomAnnotation .
 */
- (void)removeAnnotation:(AMapNaviCompositeCustomAnnotation *_Nonnull)annotation;

/**
 * @brief 在驾车导航界面添加自定义Overlay. 注意:每次退出导航之后,Overlay都会被清空. since 6.7.0
 * @param customOverlay 会被显示在驾车导航界面地图上, 此对象需遵守AMapNaviCompositeOverlay协议,否则无效, 具体参考官方Demo CustomOverlayCompositeViewController 类 .
 */
- (void)addCustomOverlay:(id <AMapNaviCompositeOverlay>_Nonnull)customOverlay;

/**
 * @brief 移除驾车导航界面的自定义Overlay. since 6.7.0
 * @param customOverlay 具体参考 AMapNaviCompositeOverlay .
 */
- (void)removeCustomOverlay:(id <AMapNaviCompositeOverlay>_Nonnull)customOverlay;
返回顶部 示例中心 常见问题 智能客服 公众号
二维码