Questa pagina descrive i passaggi di alto livello da seguire per creare una guida personalizzata nell'ambito di un'esperienza di navigazione personalizzata.
Questa procedura è diversa da quella descritta in Navigare un percorso come segue:
- Per prima cosa, devi stabilire una sessione di navigazione in modo indipendente e ottenere un'istanza di navigatore tramite la sessione anziché chiamando il controller di visualizzazione.
- Configuri un listener di eventi per rispondere agli eventi di navigazione e gestirli.
Crea una sessione di navigazione utilizzando
GMSNavigationService.createNavigationSession
e inizia la navigazione con una chiamatasetDestination
. L'esperienza di navigazione di Google richiama il navigatore tramite la visualizzazione della mappa di navigazione, i controlliGMSNavigationServices
e riceve un flusso di eventi da una sessione di navigazione indipendentemente da un'istanza UI. Ciò significa che può essere eseguito senza un'interfaccia utente o essere passato a qualsiasi esperienza basata sull'interfaccia utente. Con questo approccio, la sessione di navigazione continua a essere eseguita nella tua app finché non viene rimossa l'ultima referenza.Stabilire un fornitore di località con snapping stradale. Utilizza il provider di geolocalizzazione se vuoi che la tua app esegua il monitoraggio continuo della posizione, ad esempio quando visualizzi una schermata di navigazione con un punto blu lungo il percorso.
Configura un listener per indicazioni stradali dettagliate implementando il protocollo
GMSNavigatorListener
. Poi, trasforma queste informazioni in ciò che è necessario per la tua esperienza di navigazione personalizzata. Ad esempio:- Implementa campi di solo testo per la semplice trasmissione dello schermo delle indicazioni stradali.
- Progetta e compila i campi per la tua UI.
Configurare un simulatore di navigazione. Questa operazione è necessaria per lo sviluppo e il test.
Creare una sessione di navigazione indipendente
Il seguente snippet di codice della demo mostra la navigazione stabilita indipendentemente dal controller di visualizzazione. Il codice aggiunge quindi una mappa panoramica configurata per mostrare la posizione attuale agganciata alla 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 mostra come 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 come 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`];