Utwórz własne wskazówki

Na tej stronie opisujemy ogólne czynności, które wykonujesz w ramach niestandardowego interfejsu nawigacji, aby tworzyć spersonalizowane wskazówki.

Ten proces różni się od opisanego w sekcji Nawigowanie po trasie:

  • Najpierw tworzysz niezależnie sesję nawigacji i uzyskujesz instancję nawigatora w ramach sesji, a nie przez wywołanie kontrolera widoku.
  • Konfigurujesz detektor zdarzeń, aby odpowiadać na zdarzenia nawigacji i nimi zarządzać.
  1. Utwórz sesję nawigacji za pomocą GMSNavigationService.createNavigationSession i rozpocznij nawigację od wywołania setDestination. Tam, gdzie element nawigacyjny Google wywołuje nawigację w widoku mapy nawigacyjnej, element GMSNavigationServices steruje działaniem nawigacji i odbiera niezależnie strumień zdarzeń z sesji nawigacji z instancji interfejsu. Oznacza to, że może działać bez interfejsu lub być przekazywane do dowolnego środowiska opartego na interfejsie. Przy tym podejściu sesja nawigacji będzie działać w aplikacji do momentu usunięcia z niej ostatniego odwołania.
  2. Utworzyć dostawcę lokalizacji ograniczonych drogami. Użyj dostawcy lokalizacji, jeśli chcesz, aby aplikacja prowadziła ciągłe monitorowanie lokalizacji, np. gdy wyświetlasz widok nawigacji z niebieską kropką wzdłuż trasy.
  3. Skonfiguruj nasłuchujący szczegółowe wskazówki, wdrażając protokół GMSNavigatorListener. Następnie przekształć te informacje w materiały potrzebne do spersonalizowanej nawigacji. Na przykład:
    1. Zaimplementuj pola zawierające tylko tekst, aby w prosty sposób przesyłać ekran z trasami dojazdu.
    2. Zaprojektować i wypełnić pola dla własnego interfejsu użytkownika.
  4. Skonfigurować symulator nawigacji. Jest to konieczne na potrzeby programowania i testowania.

Utwórz niezależną sesję nawigacji

Fragment kodu z prezentacji poniżej pokazuje nawigację ustanowioną niezależnie od kontrolera widoku. Następnie kod dodaje mapę ogólną skonfigurowaną w taki sposób, aby pokazywała bieżącą lokalizację przypiętą do dróg.

// 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 ze spersonalizowanego interfejsu do interfejsu Google

Ten fragment kodu pokazuje, jak Twoja aplikacja może umożliwić użytkownikowi korzystanie z nawigacji Google z poziomu niestandardowego interfejsu nawigacji. Ten fragment kodu pokazuje też, jak aplikacja wykonuje tę zmianę podczas udostępniania mapy.

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

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

`…`

[`_mapView enableNavigationWithSession:_navigationSession`];