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