Auf dieser Seite werden die allgemeinen Schritte beschrieben, die Sie ausführen müssen, um benutzerdefinierte Anleitungen im Rahmen einer benutzerdefinierten Navigation zu erstellen.
Dieser Vorgang unterscheidet sich vom Vorgang, der unter Routen planen beschrieben wird, wie folgt:
- Sie richten zuerst unabhängig eine Navigationssitzung ein und rufen eine Navigator-Instanz über die Sitzung ab, anstatt den Viewcontroller aufzurufen.
- Sie richten einen Event-Listener ein, um auf Navigationsereignisse zu reagieren und sie zu verwalten.
Erstellen Sie eine Navigationssitzung mit
GMSNavigationService.createNavigationSession
und starten Sie die Navigation mit einemsetDestination
-Aufruf. Während bei der Google-Navigation der Navigator über die Navigationskartenansicht aufgerufen wird, steuertGMSNavigationServices
einen Stream von Ereignissen aus einer Navigationssitzung und empfängt ihn unabhängig von einer UI-Instanz. Das bedeutet, dass sie entweder ohne Benutzeroberfläche ausgeführt werden kann oder an eine beliebige UI-basierte Anwendung übergeben werden kann. Bei diesem Ansatz wird die Navigationssitzung in Ihrer App fortgesetzt, bis die letzte Referenz daraus entfernt wird.Road-Snapped-Standortanbieter einrichten Verwenden Sie den Standortanbieter, wenn Ihre App eine kontinuierliche Standortüberwachung benötigt, z. B. wenn eine Navigationsansicht mit einem blauen Punkt entlang der Route angezeigt wird.
Richten Sie einen Listener für detaillierte Abbiegehinweise ein, indem Sie das
GMSNavigatorListener
-Protokoll implementieren. Wandeln Sie diese Informationen dann in das um, was für Ihre benutzerdefinierte Navigation erforderlich ist. Beispiel:- Implementieren Sie reine Textfelder für das einfache Spiegeln von Wegbeschreibungen.
- Felder für Ihre eigene Benutzeroberfläche entwerfen und ausfüllen
Navigationssimulator einrichten Dies ist für die Entwicklung und das Testen erforderlich.
Unabhängige Navigationssitzung erstellen
Das folgende Code-Snippet aus der Demo zeigt, wie die Navigation unabhängig vom View-Controller eingerichtet wird. Anschließend wird eine Übersichtskarte hinzugefügt, die so konfiguriert ist, dass der aktuelle Standort auf der Straße angezeigt wird.
// 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;
Navigation von einer benutzerdefinierten Umgebung an Google übergeben
In diesem Code-Snippet wird veranschaulicht, wie Ihre App es dem Nutzer ermöglichen kann, von einer benutzerdefinierten Navigationsfunktion zur Google-Navigation zu wechseln. In diesem Code-Snippet sehen Sie auch, wie Ihre App diesen Übergang beim Teilen der Karte durchführt.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];