Utwórz własne wskazówki

Na tej stronie znajdziesz ogólne informacje o tym, jak tworzyć 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 kontynuowana w aplikacji, dopóki nie zostanie z niej usunięte ostatnie odwołanie.

  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 niebieskim punktem na trasie.

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

    1. Zaimplementuj pola tekstowe do prostego przesyłania wskazówek na ekran.
    2. Zaprojektuj i wypełnij pola 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 usługi do usługi 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`];