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

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

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

  • 最初にナビゲーション セッションを個別に確立し、ビュー コントローラを呼び出すのではなく、セッションを介してナビゲーター インスタンスを取得します。
  • ナビゲーション イベントに応答して管理するためのイベント リスナーを設定します。
  1. ナビゲーション セッションを作成 し、 GMSNavigationService.createNavigationSession setDestination呼び出しでナビゲーションを開始します。Google ナビゲーション エクスペリエンスでは、ナビゲーション マップビューを介してナビゲーターが呼び出されますが、 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`];