Questa pagina illustra i passaggi di alto livello da seguire per creare indicazioni personalizzate nell'ambito di un'esperienza di navigazione personalizzata.
Questa procedura è diversa da quella descritta in Percorrere un percorso come segue:
- Per prima cosa, stabilisci una sessione di navigazione in modo indipendente e ottieni un'istanza del navigatore tramite la sessione anziché chiamando il controller della vista.
- Imposti un gestore di eventi per rispondere e gestire gli eventi di navigazione.
- Crea una sessione di navigazione utilizzando
GMSNavigationService.createNavigationSession
e avvia la navigazione con una chiamatasetDestination
. Quando l'esperienza di navigazione di Google richiama il navigatore tramite la visualizzazione mappa di navigazione,GMSNavigationServices
controlla e riceve uno stream di eventi da una sessione di navigazione indipendentemente da un'istanza dell'interfaccia utente. Ciò significa che può essere eseguito senza un'interfaccia utente o trasmesso a qualsiasi esperienza basata sull'interfaccia utente. Con questo approccio, la sessione di navigazione continua a essere eseguita nella tua app finché non viene rimosso l'ultimo riferimento. - Stabilire un fornitore di dati sulla posizione basato su strada. Utilizza il fornitore di servizi di geolocalizzazione se vuoi che la tua app abbia il monitoraggio continuo della posizione, ad esempio quando viene visualizzata una visualizzazione di navigazione con un punto blu lungo il percorso.
- Configura un ascoltatore per indicazioni stradali dettagliate implementando il protocollo
GMSNavigatorListener
. Poi, trasforma queste informazioni in quanto necessario per la tua esperienza di navigazione personalizzata. Ad esempio:- Implementa campi di solo testo per una semplice trasmissione sullo schermo delle indicazioni stradali.
- Progetta e compila i campi per la tua UI.
- Configura un simulatore di navigazione. È necessaria per lo sviluppo e il test.
Creare una sessione di navigazione indipendente
Il seguente snippet di codice della demo mostra la navigazione stabilita indipendente dal controller della vista. Il codice aggiunge quindi una mappa di panoramica configurata per mostrare la posizione attuale basata sulla strada.
// 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;
Trasferimento della navigazione da un'esperienza personalizzata all'esperienza Google
Questo snippet di codice illustra in che modo la tua app può consentire all'utente di accedere all'esperienza di navigazione di Google da un'esperienza di navigazione personalizzata. Questo snippet di codice mostra anche in che modo la tua app esegue questa transizione durante la condivisione della mappa.
`UIButton *button = [UIButton buttonWithType:UIButtonTypePlain`];
[`button addTarget:self action:@selector(didTapEnterGoogleNavigationButton:)
forControlState:[_directionsButton addTarget:self`];
`…`
[`_mapView enableNavigationWithSession:_navigationSession`];