このページでは、カスタム ナビゲーション エクスペリエンスの一部として、カスタマイズされたガイダンスを作成する手順の概要を説明します。
このプロセスは、ルートのナビゲートで説明されているプロセスと次の点で異なります。
- ビュー コントローラを呼び出すのではなく、まずナビゲーション セッションを独立して確立し、セッションを通じてナビゲータ インスタンスを取得します。
- ナビゲーション イベントに応答して管理するために、イベント リスナーをセットアップします。
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`];