Auf dieser Seite werden die allgemeinen Schritte beschrieben, die Sie ausführen müssen, um benutzerdefinierte Anweisungen im Rahmen einer benutzerdefinierten Navigation zu erstellen.
Dieser Vorgang unterscheidet sich vom Vorgang unter Routen planen 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.
Navigationssitzung erstellen mit
GMSNavigationService.createNavigationSessionund Navigation mit einemsetDestination-Aufruf starten. Während bei der Google-Navigation der Navigator über die Navigationskartenansicht aufgerufen wird, steuertGMSNavigationServiceseine Navigationssitzung unabhängig von einer UI-Instanz und empfängt einen Stream von Ereignissen aus dieser Sitzung. 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.An Straßen ausgerichteten 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 Navigation 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`];