Na tej stronie znajdziesz ogólne instrukcje tworzenia dostosowanych wskazówek w ramach niestandardowej nawigacji.
Ten proces różni się od procesu opisanego w artykule Wyznaczanie trasy w następujący sposób:
- Najpierw niezależnie tworzysz sesję nawigacji i uzyskujesz instancję nawigatora za jej pomocą, a nie przez wywołanie kontrolera widoku.
- Odbiornik zdarzeń konfiguruje się w celu odpowiadania na zdarzenia nawigacyjne i zarządzania nimi.
Utwórz sesję nawigacji za pomocą
GMSNavigationService.createNavigationSession
i rozpocznij nawigację za pomocą wywołaniasetDestination
. Gdy nawigacja Google wywołuje nawigatora w widoku mapy nawigacyjnej,GMSNavigationServices
steruje sesją nawigacyjną i otrzymuje z niej strumień zdarzeń niezależnie od instancji interfejsu. Oznacza to, że może działać bez interfejsu lub być przekazywany do dowolnego interfejsu. W tym przypadku sesja nawigacji będzie działać w aplikacji, dopóki nie zostanie z niej usunięte ostatnie odwołanie.Ustanów dostawcę lokalizacji przyciąganej do drogi. Użyj dostawcy lokalizacji, jeśli chcesz, aby aplikacja stale monitorowała lokalizację, np. podczas wyświetlania widoku nawigacji z niebieską kropką na trasie.
Skonfiguruj odbiornik szczegółowych wskazówek dojazdu, wdrażając protokół
GMSNavigatorListener
. Następnie przekształć te informacje w dowolny sposób, aby dostosować nawigację do swoich potrzeb. Na przykład:- Wprowadź pola tekstowe, aby umożliwić proste przesyłanie instrukcji na ekran.
- Projektuj i wypełniaj pola własnego interfejsu.
Konfigurowanie symulatora nawigacji Jest to niezbędne do programowania i testowania.
Tworzenie niezależnej sesji nawigacji
Poniższy fragment kodu z prezentacji pokazuje nawigację ustanowioną niezależnie od kontrolera widoku. Następnie kod dodaje mapę ogólną skonfigurowaną tak, aby wyświetlać bieżącą lokalizację przypisaną 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 niestandardowego interfejsu nawigacji do nawigacji Google. Ten fragment kodu pokazuje też, jak aplikacja przechodzi w ten stan podczas udostępniania mapy.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];