カスタマイズされたガイダンスを作成する

このページでは、カスタム ナビゲーション エクスペリエンスの一環として、カスタマイズされたガイダンスを作成する手順の概要について説明します。

このプロセスは、 ルートを ナビゲートするで説明されているプロセスとは次のように異なります。

  • 最初にナビゲーション セッションを個別に確立し、ビュー コントローラを呼び出すのではなく、セッションを介してナビゲータ インスタンスを取得します。
  • ナビゲーション イベントに応答して管理するためのイベント リスナーを設定します。
  1. ナビゲーション セッションを作成 し、 GMSNavigationService.createNavigationSession 呼び出しでナビゲーションを開始します。setDestinationGoogle ナビゲーション エクスペリエンスでは、ナビゲーション マップビューを介してナビゲータが呼び出されますが、 GMSNavigationServices は ナビゲーション セッションからイベント ストリームを UI インスタンスから独立して制御して受信します。つまり、UI なしで実行することも、任意の UI ベースのエクスペリエンスに渡すこともできます。この方法では、最後の参照が削除されるまで、ナビゲーション セッションがアプリで実行され続けます。

  2. 道路にスナップされた位置情報プロバイダを確立します。アプリで位置情報の継続的なモニタリングを行う場合は、位置情報プロバイダを使用します。たとえば、ルートに沿って青い点でナビゲーション ビューを表示する場合などです。

  3. 詳細なターンバイターン ガイダンスのリスナーを設定しますGMSNavigatorListener プロトコルを実装します。次に、その情報を カスタム ナビゲーション エクスペリエンスに必要なものに変換します。次に例を示します。

    1. シンプルな画面キャストの方向指示用のテキストのみのフィールドを実装します。
    2. 独自の UI のフィールドを設計して入力します。
  4. ナビゲーション シミュレータを設定します。これは開発と テストに必要です。

独立したナビゲーション セッションを作成する

デモの次のコード スニペットは、ビュー コントローラから独立して確立されたナビゲーションを示しています 。次に、現在の道路にスナップされた位置情報を表示するように構成された概要地図 を追加します。

// 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`];