Na tej stronie znajdziesz ogólne informacje o tym, jak tworzyć spersonalizowane wskazówki w ramach niestandardowej nawigacji.
Ten proces różni się od opisanego w artykule Nawigowanie po trasie w następujący sposób:
- Najpierw niezależnie inicjujesz sesję nawigacji i uzyskiwanie instancji Navigatora przez sesję, a nie przez wywołanie kontrolera widoku.
- Skonfiguruj odbiornik zdarzeń, aby reagować na zdarzenia związane z nawigacją i nimi zarządzać.
- Utwórz sesję nawigacji za pomocą
GMSNavigationService.createNavigationSession
i rozpocznij nawigację za pomocą wywołaniasetDestination
. Gdy funkcja nawigacji Google wywołuje nawigatora w widoku mapy nawigacyjnej,GMSNavigationServices
steruje i odbiera strumień zdarzeń z sesji nawigacji niezależnie od wystąpienia interfejsu użytkownika. Oznacza to, że może działać bez interfejsu użytkownika lub zostać przekazana do dowolnego interfejsu użytkownika. W przypadku tego podejścia sesja nawigacji będzie działać w aplikacji, dopóki nie zostanie z niej usunięta ostatnia referencja. - Ustaw dostawcę danych o lokalizacji, który korzysta z drogowej metody określania lokalizacji. Użyj dostawcy lokalizacji, jeśli chcesz, aby Twoja aplikacja miała ciągły monitoring lokalizacji, np. podczas wyświetlania widoku nawigacji z niebieską kropką na trasie.
- Skonfiguruj odbiorcę, aby uzyskać szczegółowe wskazówki nawigacyjne, korzystając z protokołu
GMSNavigatorListener
. Następnie przekształcaj te informacje w cokolwiek jest potrzebne do korzystania z nawigacji niestandardowej. Na przykład:- Wprowadź pola tylko z tekstem, aby umożliwić łatwe przesyłanie na ekran wskazówek.
- Projektuj i wypełniaj pola w interfejsie użytkownika.
- Skonfiguruj symulator nawigacji. Jest to konieczne do tworzenia i testowania.
Tworzenie niezależnej sesji nawigacji
Ten fragment kodu z prezentacji pokazuje nawigację utworzoną niezależnie od kontrolera widoku. Kod dodaje mapę ogólną skonfigurowaną tak, aby wyświetlać bieżącą lokalizację na drodze.
// 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 interfejsu niestandardowego do interfejsu Google
Ten fragment kodu pokazuje, jak aplikacja może umożliwić użytkownikowi przejście do nawigacji Google z poziomu nawigacji niestandardowej. Ten fragment kodu pokazuje też, jak aplikacja przełącza się na mapę podczas udostępniania.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];