このページでは、カスタム ナビゲーション エクスペリエンスの一環として、カスタマイズされたガイダンスを作成する手順の概要について説明します。
このプロセスは、ルートをナビゲートするで説明されているプロセスと次の点で異なります。
- まず、ナビゲーション セッションを個別に確立し、ビュー コントローラを呼び出すのではなく、セッションを介してナビゲーター インスタンスを取得します。
- ナビゲーション イベントに応答して管理するイベント リスナーを設定します。
GMSNavigationService.createNavigationSession
を使用してナビゲーション セッションを作成し、setDestination
呼び出しでナビゲーションを開始します。Google ナビゲーション エクスペリエンスがナビゲーション マップビューを介してナビゲーターを呼び出す場合、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`];