Auf dieser Seite werden die allgemeinen Schritte beschrieben, die Sie ausführen, um benutzerdefinierte Anleitungen zu erstellen im Rahmen einer benutzerdefinierten Navigation Erfahrung.
Dieser Prozess unterscheidet sich vom Prozess unter Route navigieren 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 Ereignis-Listener ein, um auf Navigationsereignisse zu reagieren und sie zu verwalten.
Erstellen Sie eine Navigationssitzung mit
GMSNavigationService.createNavigationSessionund starten Sie die Navigation mit einemsetDestinationAufruf. Während die Google-Navigation den Navigator über die Navigationskartenansicht aufruft, steuertGMSNavigationServiceseinen Stream von Ereignissen aus einer Navigationssitzung und empfängt ihn unabhängig von einer UI-Instanz. Das bedeutet, dass sie entweder ohne UI ausgeführt werden kann oder an jede UI-basierte Umgebung übergeben werden kann. Bei diesem Ansatz wird die Navigationssitzung in Ihrer App so lange ausgeführt, bis die letzte Referenz daraus entfernt wird.Richten Sie einen Standortanbieter ein, der Standorte an Straßen ausrichtet. 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 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, auf der der aktuelle Standort angezeigt wird, der an Straßen ausgerichtet ist.
// 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 die Google-Umgebung ü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`];