Auf dieser Seite werden die allgemeinen Schritte beschrieben, die Sie ausführen, um benutzerdefinierte Anleitungen zu erstellen im Rahmen einer benutzerdefinierten Navigation Erfahrung.
Dieser Vorgang unterscheidet sich vom Vorgang unter Route folgen wie folgt:
- Sie richten zuerst unabhängig eine Navigationssitzung ein und rufen eine Navigator -Instanz über die Sitzung ab, anstatt den View-Controller aufzurufen.
- Sie richten einen Event-Listener ein, um auf Navigationsereignisse zu reagieren und sie zu verwalten.
Erstellen Sie eine Navigationssitzung mit
GMSNavigationService.createNavigationSessionund starten Sie die Navigation mit einemsetDestinationAufruf. Bei der Google-Navigation wird der Navigator über die Navigationskartenansicht aufgerufen.GMSNavigationServicessteuert und empfängt einen Stream von Ereignissen aus einer Navigationssitzung unabhängig von einer UI-Instanz. Das bedeutet, dass sie entweder ohne UI ausgeführt werden kann oder an jede UI-basierte Nutzung weitergegeben werden kann. Bei dieser Methode wird die Navigationssitzung in Ihrer App so lange ausgeführt, bis die letzte Referenz daraus entfernt wird.Richten Sie einen Standortanbieter mit Straßenanpassung ein. Verwenden Sie den Standortanbieter, wenn Ihre App eine kontinuierliche Standortüberwachung durchführen soll, z. B. wenn eine Navigationsansicht mit einem blauen Punkt entlang der Route angezeigt wird.
Richten Sie einen Listener für die detaillierte Routenführung 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 die einfache Bildschirmübertragung von Wegbeschreibungen.
- Entwerfen und füllen Sie Felder für Ihre eigene UI.
Richten Sie einen Navigationssimulator ein. Dies ist für die Entwicklung und das Testen erforderlich.
Unabhängige Navigationssitzung erstellen
Das folgende Code-Snippet aus der Demo zeigt die Navigation, die unabhängig vom View-Controller eingerichtet wurde. Der Code fügt dann eine Übersichtskarte hinzu, die so konfiguriert ist, dass der aktuelle Standort mit Straßenanpassung 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 Nutzung an die Google-Navigation übergeben
Dieses Code-Snippet zeigt, wie Ihre App dem Nutzer ermöglicht, von einer benutzerdefinierten Navigation zur Google-Navigation zu wechseln. Außerdem wird gezeigt, wie Ihre App diesen Übergang vornimmt, während die Karte freigegeben wird.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];