Utwórz własne wskazówki

Ta strona zawiera ogólne informacje o krokach, które należy wykonać, aby utworzyć dostosowane wskazówki w ramach niestandardowej nawigacji doświadczenia.

Ten proces różni się od procesu opisanego w sekcji Nawigowanie po trasie w następujący sposób:

  • Najpierw niezależnie ustanawiasz sesję nawigacji i uzyskujesz instancję nawigatora za pomocą sesji, a nie przez wywołanie kontrolera widoku.
  • Konfigurujesz detektor zdarzeń, aby reagować na zdarzenia nawigacji i nimi zarządzać.
  1. Utwórz sesję nawigacji za pomocą GMSNavigationService.createNavigationSession i rozpocznij nawigację, wywołując setDestination. Gdy nawigacja Google wywołuje nawigatora za pomocą widoku mapy nawigacji, GMSNavigationServices steruje strumieniem zdarzeń z sesji nawigacji i odbiera go niezależnie od instancji interfejsu. Oznacza to, że może działać bez interfejsu lub zostać przekazana do dowolnego interfejsu. Dzięki temu podejściu sesja nawigacji jest nadal uruchomiona w aplikacji, dopóki nie zostanie usunięte ostatnie odwołanie do niej.

  2. Ustanów dostawcę lokalizacji przyciąganej do drogi. Użyj dostawcy lokalizacji, jeśli chcesz, aby Twoja aplikacja stale monitorowała lokalizację, np. podczas wyświetlania widoku nawigacji z niebieską kropką wzdłuż trasy.

  3. Skonfiguruj odbiornik szczegółowych wskazówek nawigacyjnych , implementując protokół GMSNavigatorListener. Następnie przekształć te informacje w dowolne dane potrzebne do niestandardowej nawigacji. Na przykład:

    1. Zaimplementuj pola tylko tekstowe, aby umożliwić proste przesyłanie wskazówek na ekran.
    2. Zaprojektuj i wypełnij pola dla własnego interfejsu.
  4. Skonfiguruj symulator nawigacji. Jest to niezbędne do programowania i testowania.

Tworzenie niezależnej sesji nawigacji

Poniższy fragment kodu z wersji demonstracyjnej pokazuje nawigację ustanowioną niezależnie od kontrolera widoku. Następnie kod dodaje mapę ogólną skonfigurowaną tak, aby pokazywała bieżącą lokalizację przyciąganą do drogi.

// 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;

Przekazywanie nawigacji z niestandardowej nawigacji do nawigacji Google

Ten fragment kodu pokazuje, jak aplikacja może umożliwić użytkownikowi przejście z niestandardowej nawigacji do nawigacji Google. Ten fragment kodu pokazuje też, jak aplikacja dokonuje tego przejścia podczas udostępniania mapy.

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

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

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];