本页介绍了您在创建自定义指南时,需要遵循哪些高级别步骤来创建自定义指南 作为自定义导航 体验的一部分。
此过程与在 导航 路线中介绍的过程不同,具体如下:
- 您首先独立建立导航会话,并通过该会话获取导航器 实例,而不是通过调用视图控制器来获取。
- 您需要设置一个事件监听器来响应和管理导航事件。
创建导航会话,并通过
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`];