创建自定义指导

本页面介绍了您在创建自定义指南时遵循的简要步骤 作为自定义导航的一部分 体验

该流程不同于 浏览 如下

  • 首先独立建立导航会话并获取导航器 而不是调用视图控制器来实现的。
  • 您可以设置事件监听器来响应和管理导航事件。
  1. 使用以下代码创建导航会话GMSNavigationService.createNavigationSession 并通过 setDestination 调用开始导航。Google 在哪里 导航体验会在导航地图视图中调用导航器, GMSNavigationServices 可控制和接收来自 导航会话独立于界面实例。也就是说,它可以 要么在没有界面的情况下运行,要么传递给任何基于界面的体验。包含 此方法,导航会话会继续在您的应用中运行,直到 将对最后一个引用移除
  2. 建立道路拦截位置信息提供程序。在以下情况下可使用位置信息提供程序: 您希望应用持续监控位置,例如在 ,显示路线沿途蓝点的导航视图。
  3. 设置监听器以获取详细的精细导航,方法是实现 GMSNavigatorListener 协议。然后将这些信息转换为 打造您的自定义导航体验所需的一切。例如:
    1. 实现纯文字字段,用于路线的简单抓屏。
    2. 针对您自己的界面设计和填充字段。
  4. 设置导航模拟器。对于开发和使用 测试。

创建独立的导航会话

演示中的以下代码段显示了已建立的导航 独立于视图控制器代码随后会添加一个总览图 配置为显示当前道路截取的位置。

// Create the navigation session.

 _navigationSession = [GMSNavigationServices createNavigationSession];
 GMSRoadSnappedLocationProvider *roadSnappedLocationProvider =
     _navigationSession.roadSnappedLocationProvider;
 [roadSnappedLocationProvider startUpdatingLocation];
 GMSNavigator *navigator = _navigationSession.navigator;
 [navigator addListener:self];
 navigator.voiceGuidance = GMSNavigationVoiceGuidanceSilent;
 navigator.sendsBackgroundNotifications = NO;
 _navigationSession.started = YES;
​​ [navigator setDestinations:@[ destination ]
                   callback:^(GMSRouteStatus routeStatus) {
                      // …handle changes in route status.
                    }];

 // Add an overview map.
 _mapView = [[GMSMapView alloc] initWithFrame:CGRectZero];
 [self.mainStackView addArrangedSubview:_mapView];
 [self.mainStackView setNeedsLayout];
 _mapView.settings.compassButton = YES;
 _mapView.delegate = self;
 _mapView.myLocationEnabled = YES;
 _mapView.roadSnappedMyLocationSource = roadSnappedLocationProvider;

将导航从自定义体验传递到 Google 体验

此代码段说明了您的应用如何允许用户输入 自定义导航体验带来的 Google 导航体验。此代码 代码段还会显示您的应用如何在共享地图时进行这种过渡。

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];