Una finestra informativa consente di mostrare informazioni all'utente quando tocca un indicatore.
Una finestra informativa è disegnata orientata verso lo schermo del dispositivo, centrata sopra l'indicatore associato. La finestra informativa predefinita contiene il titolo in grassetto, con il testo dello snippet sotto il titolo.
I contenuti della finestra informativa sono definiti dalle proprietà title
e
snippet
dell'indicatore. Se fai clic sull'indicatore, non viene visualizzata una
finestra informativa se entrambe le proprietà title
e snippet
sono vuote o nil
.
Viene visualizzata una sola finestra informativa alla volta. Se un utente tocca un altro indicatore, la finestra corrente è nascosta e si apre la nuova finestra informativa. Se l'utente fa clic su un indicatore che al momento mostra una finestra informativa, questa si chiude e si riapre.
Crea una finestra informativa personalizzata per aggiungere testo o immagini aggiuntive. Una finestra informativa personalizzata ti offre il controllo completo dell'aspetto del popup.
Aggiungi una finestra informativa
Lo snippet seguente crea un indicatore semplice, con un solo titolo per il testo della finestra informativa.
Swift
let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let london = GMSMarker(position: position) london.title = "London" london.map = mapView
Objective-C
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *london = [GMSMarker markerWithPosition:position]; london.title = @"London"; london.map = mapView;
Con la proprietà snippet
, puoi aggiungere altro testo che verrà visualizzato sotto il titolo con un carattere più piccolo. Le stringhe più lunghe della larghezza della finestra informativa vengono inserite automaticamente su diverse righe. I messaggi molto lunghi potrebbero essere troncati.
Swift
london.title = "London" london.snippet = "Population: 8,174,100" london.map = mapView
Objective-C
london.title = @"London"; london.snippet = @"Population: 8,174,100"; london.map = mapView;
Mostra/nascondi una finestra informativa
Le finestre informative sono progettate per rispondere agli eventi di tocco dell'utente sull'indicatore.
Puoi mostrare o nascondere una finestra informativa in modo programmatico impostando la proprietà selectedMarker
di GMSMapView
:
- Imposta
selectedMarker
sul nome dell'indicatore da mostrare. - Imposta
selectedMarker
sunil
per nasconderlo.
Swift
london.title = "London" london.snippet = "Population: 8,174,100" london.map = mapView // Show marker mapView.selectedMarker = london // Hide marker mapView.selectedMarker = nil
Objective-C
london.title = @"London"; london.snippet = @"Population: 8,174,100"; london.map = mapView; // Show marker mapView.selectedMarker = london; // Hide marker mapView.selectedMarker = nil;
Impostazione dell'aggiornamento automatico di una finestra informativa
Imposta tracksInfoWindowChanges
sull'indicatore su YES
o true
se vuoi che le nuove proprietà o i contenuti della finestra informativa vengano visualizzati immediatamente quando vengono modificati, anziché dover aspettare che la finestra informativa si nasconda e poi venga mostrata di nuovo. Il valore predefinito è NO
o false
.
Swift
london.tracksInfoWindowChanges = true
Objective-C
london.tracksInfoWindowChanges = YES;
Per decidere quando impostare la proprietà tracksInfoWindowChanges
, devi valutare le prestazioni relative alle prestazioni rispetto ai vantaggi della riorganizzazione automatica della finestra informativa. Ad esempio:
- Se devi apportare una serie di modifiche, puoi cambiare la proprietà in
YES
e poi tornare aNO
. - Quando un'animazione è in esecuzione o i contenuti vengono caricati in modo asincrono,
devi mantenere la proprietà impostata su
YES
fino al completamento delle azioni.
Fai riferimento anche alle note da considerare quando utilizzi la proprietà iconView
dell'indicatore.
Modifica della posizione di una finestra informativa
Una finestra informativa è disegnata orientata verso lo schermo del dispositivo, centrata sopra l'indicatore associato. Puoi modificare la posizione della finestra informativa
relativa all'indicatore impostando la proprietà infoWindowAnchor
. Questa proprietà accetta un valore CGPoint
, definito come un offset (x,y) in cui entrambi i valori x e y sono compresi tra 0,0 e 1,0. L'offset predefinito è (0,5, 0,0), ovvero il centro in alto. L'impostazione dell'offset infoWindowAnchor
è utile per allineare la finestra informativa a un'icona personalizzata.
Swift
london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5) london.icon = UIImage(named: "house") london.map = mapView
Objective-C
london.infoWindowAnchor = CGPointMake(0.5, 0.5); london.icon = [UIImage imageNamed:@"house"]; london.map = mapView;
Gestione degli eventi nelle finestre informative
Puoi ascoltare i seguenti eventi della finestra informativa:
mapView:markerInfoWindow:
- Richiamato quando sta per essere selezionato un indicatore. Facoltativamente, può restituire una finestra informativa personalizzata, ad esempioUIView
, da utilizzare per l'indicatore. Per saperne di più, consulta la sezione Finestre informative personalizzate riportate di seguito.mapView:markerInfoContents:
- Richiamato quandomapView:markerInfoWindow
restituisce nil.mapView:didCloseInfoWindowOfMarker:
- Richiamato quando la finestra informativa dell'indicatore è chiusa.mapView:didLongPressInfoWindowOfMarker:
- Chiamata dopo una pressione prolungata sulla finestra informativa di un indicatore.
Per ascoltare gli eventi, devi implementare il protocollo GMSMapViewDelegate
. Consulta la guida agli eventi e l'elenco dei metodi su GMSMapViewDelegate
.
GitHub include esempi che mostrano come gestire gli eventi della finestra informativa:
Finestre informative personalizzate
Personalizza i contenuti delle finestre informative creando una sottoclasse di UIView
che definisce il layout della finestra informativa personalizzata. Nella sottoclasse, definisci
la vista come preferisci. Ad esempio, puoi utilizzare le istanze di UILabel
personalizzate per mostrare il testo del titolo e dello snippet e altre visualizzazioni, come le istanze UIImageView
, per aggiungere le immagini mostrate nella finestra informativa.
Assicurati che ViewController
implementi il protocollo
GMSIndoorDisplayDelegate
e definisca un listener per l'evento
mapView:markerInfoWindow:. Questo listener di eventi viene richiamato quando sta per essere selezionato un indicatore e ti consente di restituire un'istanza della tua classe UIView
personalizzata per definire la finestra informativa personalizzata utilizzata dall'indicatore.
Le immagini di seguito mostrano una finestra informativa predefinita, una finestra informativa con contenuti personalizzati e una finestra informativa con cornice e sfondo personalizzati.
Gli esempi di codice su GitHub forniti con Maps SDK for iOS includono esempi di finestre informative personalizzate. Ad esempio, consulta la definizione di MarkerInfoWindowViewController.m (Objective-C) o MarkerInfoWindowViewController.swift (Swift).
Consulta gli esempi di codice per informazioni su come scaricare ed eseguire questi esempi.