示例中心
功能在线体验
控制台
您现在的位置: 开发 > iOS 导航SDK > 开发指南 > HUD导航模式 > HUD导航 >

高德 开发 iOS 导航SDK 开发指南 HUD导航模式 HUD导航

更新时间:2017年11月30日

基本介绍

HUD 导航用于驾车过程中投影展示,该模式直观展示了导航信息,是一种安全简洁的导航模式。

导航 SDK 为您提供了一个默认的HUD界面 AMapNaviHUDView,如下图所示:

使用说明

下面以驾车导航为例,介绍如何实现HUD导航。

第 1 步,初始化###。

1)初始化 AMapNaviHUDView 对象。

- (void)initHudView
{
    if (self.hudView == nil)
    {
        self.hudView = [[AMapNaviHUDView alloc] initWithFrame:self.view.bounds];
        self.hudView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
        
        [self.hudView setDelegate:self];
        [self.view addSubview:self.hudView];
    }
}
func initHUDView() {
    hudView = AMapNaviHUDView(frame: view.bounds)
    hudView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    hudView.delegate = self
    
    view.addSubview(hudView)
}

2)初始化 AMapNaviDriveManager,将 AMapNaviHUDView 添加为导航数据的 Representative,使其可以接收到导航诱导数据。。

- (void)initDriveManager
{
     [[AMapNaviDriveManager sharedInstance] setDelegate:self];
        
     //将hudView添加为导航数据的Representative,使其可以接收到导航诱导数据
     [[AMapNaviDriveManager sharedInstance] addDataRepresentative:self.hudView];
}
func initDriveManager() {
    driveManager.delegate = self
    
    AMapNaviDriveManager.sharedInstance().allowsBackgroundLocationUpdates = true
    AMapNaviDriveManager.sharedInstance().pausesLocationUpdatesAutomatically = false
    
    //将hudView添加为导航数据的Representative,使其可以接收到导航诱导数据
    AMapNaviDriveManager.sharedInstance().addDataRepresentative(hudView)
}

第 2 步,进行驾车路线规划

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    
    [self calculateRoute];
}

- (void)calculateRoute
{
    //进行路径规划
    [[AMapNaviDriveManager sharedInstance] calculateDriveRouteWithStartPoints:@[self.startPoint]
                                                endPoints:@[self.endPoint]
                                                wayPoints:nil
                                          drivingStrategy:AMapNaviDrivingStrategyMultipleAvoidCongestion];
}
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    calculateRoute()
}

func calculateRoute() {
    //进行路径规划
    AMapNaviDriveManager.sharedInstance().calculateDriveRoute(withStart: [startPoint],
                                     end: [endPoint],
                                     wayPoints: nil,
                                     drivingStrategy: .multipleAvoidCongestion)
}

第 3 步,开启导航

在路线规划成功的回调函数中,开启驾车导航(实时或模拟)。

- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
    NSLog(@"onCalculateRouteSuccess");
    
    //算路成功后进行模拟导航
    [[AMapNaviDriveManager sharedInstance] startEmulatorNavi];
}
func driveManager(onCalculateRouteSuccess driveManager: AMapNaviDriveManager) {
    NSLog("CalculateRouteSuccess")
    
    //算路成功后进行模拟导航
   AMapNaviDriveManager.sharedInstance().startEmulatorNavi()
}

第 4 步,当退出页面的时候,销毁AMapNaviDriveManager单例

- (void)dealloc
{
    [[AMapNaviDriveManager sharedInstance] stopNavi];
    [[AMapNaviDriveManager sharedInstance] removeDataRepresentative:self.driveView];
    [[AMapNaviDriveManager sharedInstance] setDelegate:nil];
    
    BOOL success = [AMapNaviDriveManager destroyInstance];
    NSLog(@"单例是否销毁成功 : %d",success);
    
}
deinit {
    AMapNaviDriveManager.sharedInstance().stopNavi()
    AMapNaviDriveManager.sharedInstance().removeDataRepresentative(driveView)
    AMapNaviDriveManager.sharedInstance().delegate = nil
        
    let success = AMapNaviDriveManager.destroyInstance()
    NSLog("单例是否销毁成功 : \(success)")
        
}

 

示例中心 功能
在线体验
常见问题