Individuelle Anleitung erstellen

Auf dieser Seite werden die allgemeinen Schritte beschrieben, mit denen Sie eine benutzerdefinierte Anleitung im Rahmen einer benutzerdefinierten Navigation erstellen.

So unterscheidet sich dieser Vorgang von dem unter Routenführung beschriebenen Vorgang:

  • Sie richten zuerst unabhängig eine Navigationssitzung ein und rufen während der Sitzung eine Navigatorinstanz ab, anstatt den Ansicht-Controller aufzurufen.
  • Sie richten einen Event-Listener ein, der auf Navigationsereignisse reagiert und diese verwaltet.
  1. Erstellen Sie eine Navigationssitzung mit GMSNavigationService.createNavigationSession und starten Sie die Navigation mit einem setDestination-Aufruf. Wenn der Navigator in der Google-Navigation über die Navigationskarte aufgerufen wird, steuert und empfängt GMSNavigationServices einen Ereignisstream aus einer Navigationssitzung unabhängig von einer UI-Instanz. Das bedeutet, dass er entweder ohne UI ausgeführt oder an beliebige UI-basierte Funktionen übergeben werden kann. Bei diesem Ansatz wird die Navigationssitzung in Ihrer App fortgesetzt, bis der letzte Verweis aus ihr entfernt wird.
  2. Anbieter für straßengebundene Standortdienste einrichten Verwenden Sie den Standortanbieter, wenn Ihre App eine kontinuierliche Standortüberwachung bietet, z. B. wenn eine Navigationsansicht mit einem blauen Punkt entlang der Route angezeigt wird.
  3. Richten Sie einen Listener für eine detaillierte detaillierte Routenführung ein, indem Sie das Protokoll GMSNavigatorListener implementieren. Anschließend wandeln Sie diese Informationen in das um, was Sie für Ihre benutzerdefinierte Navigation benötigen. Beispiel:
    1. Implementieren Sie reine Textfelder für eine einfache Bildschirmübertragung von Routen.
    2. Entwerfen und füllen Sie Felder für Ihre eigene UI.
  4. Richten Sie einen Navigationssimulator ein. Dies ist für Entwicklung und Tests erforderlich.

Eine unabhängige Navigationssitzung erstellen

Das folgende Code-Snippet aus der Demo zeigt die Navigation unabhängig vom Ansichts-Controller. Mit dem Code wird dann eine Übersichtskarte hinzugefügt, auf der die aktuelle verkehrsfreie Straße zu sehen 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 der benutzerdefinierten Oberfläche an die Google-Oberfläche übergeben

Dieses Code-Snippet veranschaulicht, wie Nutzer in deiner App über eine benutzerdefinierte Navigation auf die Google-Navigation zugreifen können. Dieses Code-Snippet zeigt auch, wie Ihre App diesen Übergang beim Teilen der Karte vornimmt.

`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];

[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];