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ć.
- Utwórz sesję nawigacji za pomocą
GMSNavigationService.createNavigationSession
i rozpocznij nawigację od wywołaniasetDestination
. Tam, gdzie element nawigacyjny Google wywołuje nawigację w widoku mapy nawigacyjnej, elementGMSNavigationServices
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. - 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.
- 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:- Zaimplementuj pola zawierające tylko tekst, aby w prosty sposób przesyłać ekran z trasami dojazdu.
- Zaprojektować i wypełnić pola dla własnego interfejsu użytkownika.
- 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`];