本页面介绍了您在创建自定义指南时遵循的简要步骤 作为自定义导航的一部分 体验。
该流程不同于 浏览 如下:
- 首先独立建立导航会话并获取导航器 而不是调用视图控制器来实现的。
- 您可以设置事件监听器来响应和管理导航事件。
- 使用以下代码创建导航会话:
GMSNavigationService.createNavigationSession
并通过setDestination
调用开始导航。Google 在哪里 导航体验会在导航地图视图中调用导航器,GMSNavigationServices
可控制和接收来自 导航会话独立于界面实例。也就是说,它可以 要么在没有界面的情况下运行,要么传递给任何基于界面的体验。包含 此方法,导航会话会继续在您的应用中运行,直到 将对最后一个引用移除 - 建立道路拦截位置信息提供程序。在以下情况下可使用位置信息提供程序: 您希望应用持续监控位置,例如在 ,显示路线沿途蓝点的导航视图。
- 设置监听器以获取详细的精细导航,方法是实现
GMSNavigatorListener
协议。然后将这些信息转换为 打造您的自定义导航体验所需的一切。例如:- 实现纯文字字段,用于路线的简单抓屏。
- 针对您自己的界面设计和填充字段。
- 设置导航模拟器。对于开发和使用 测试。
创建独立的导航会话
演示中的以下代码段显示了已建立的导航 独立于视图控制器代码随后会添加一个总览图 配置为显示当前道路截取的位置。
// 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`];