このページでは、カスタム ナビゲーション エクスペリエンスの一環として、カスタマイズされたガイダンスを作成する手順の概要について説明します。
このプロセスは、 ルートを ナビゲートするで説明されているプロセスとは次のように異なります。
- 最初にナビゲーション セッションを個別に確立し、ビュー コントローラを呼び出すのではなく、セッションを介してナビゲータ インスタンスを取得します。
- ナビゲーション イベントに応答して管理するためのイベント リスナーを設定します。
ナビゲーション セッションを作成 し、
GMSNavigationService.createNavigationSession呼び出しでナビゲーションを開始します。setDestinationGoogle ナビゲーション エクスペリエンスでは、ナビゲーション マップビューを介してナビゲータが呼び出されますが、GMSNavigationServicesは、 ナビゲーション セッションから UI インスタンスから独立してイベント ストリームを制御して受信します。つまり、UI なしで実行することも、任意の UI ベースのエクスペリエンスに渡すこともできます。 このアプローチでは、最後の参照が削除されるまで、ナビゲーション セッションがアプリで実行され続けます。道路にスナップされた位置情報プロバイダを確立します 。ルートに沿って青い点でナビゲーション ビューを表示する場合など、アプリで位置情報の継続的なモニタリングを行う場合は、位置情報プロバイダを使用します。
GMSNavigatorListenerプロトコルを実装して、詳細なターンバイターン ガイダンスのリスナーを設定します 。次に、その情報をカスタム ナビゲーション エクスペリエンスに必要なものに変換します。次に例を示します。- 方向の簡単な画面キャスト用にテキストのみのフィールドを実装します。
- 独自の UI のフィールドを設計して入力します。
ナビゲーション シミュレータを設定します 。これは開発とテストに必要です。
独立したナビゲーション セッションを作成する
デモの次のコード スニペットは、ビュー コントローラから独立して確立されたナビゲーションを示しています。次に、現在の道路にスナップされた位置情報を表示するように構成された概観マップを追加します。
// 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`];