Una finestra informativa consente di mostrare informazioni all'utente quando tocca un indicatore.
Viene disegnata una finestra informativa 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 di informazioni 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 viene nascosta e si apre la nuova finestra informativa. Se l'utente fa clic su un indicatore per il quale è attualmente visualizzata una finestra informativa, questa si chiude e si riapre.
Crea una finestra informativa personalizzata per aggiungere testo o immagini aggiuntivi. Una finestra di informazioni personalizzata ti consente di avere il controllo completo sull'aspetto del popup.
Aggiungere una finestra informativa
Il seguente snippet crea un indicatore semplice, con solo un 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 del testo aggiuntivo che verrà visualizzato sotto il titolo in un carattere più piccolo. Le stringhe più lunghe della larghezza della finestra informativa vengono automaticamente inserite su più 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;
Mostrare/nascondere una finestra informativa
Le finestre di informazioni 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;
Impostare un riquadro informativo per l'aggiornamento automatico
Imposta tracksInfoWindowChanges
sul 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 attendere che la finestra informativa venga nascosta e poi 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 considerazioni sul rendimento rispetto ai vantaggi di ridisegnare automaticamente la finestra informativa. Ad esempio:
- Se devi apportare una serie di modifiche, puoi impostare la proprietà su
YES
e poi di nuovo suNO
. - Quando è in esecuzione un'animazione o i contenuti vengono caricati in modo asincrono,
devi mantenere la proprietà impostata su
YES
fino al completamento delle azioni.
Consulta anche le note per la considerazione quando utilizzi la proprietà iconView
dell'indicatore.
Modificare la posizione di una finestra informativa
Viene disegnata una finestra informativa orientata verso lo schermo del dispositivo, centrata sopra l'indicatore associato. Puoi modificare la posizione della finestra informativa rispetto all'indicatore impostando la proprietà infoWindowAnchor
. Questa proprietà accetta un CGPoint
, definito come un offset (x, y) in cui sia x che y vanno da 0,0 a 1,0. L'offset predefinito è (0,5, 0,0), ovvero la parte superiore centrata. 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:
: viene chiamato quando un indicatore sta per essere selezionato. Se vuoi, puoi restituire una finestra informativa personalizzata, comeUIView
, da utilizzare per il segnaposto. Per saperne di più, consulta la sezione Finestre di informazioni personalizzate di seguito.mapView:markerInfoContents:
- Viene chiamato quandomapView:markerInfoWindow
restituisce nil.mapView:didCloseInfoWindowOfMarker:
: viene chiamato quando la finestra informativa dell'indicatore viene chiusa.mapView:didLongPressInfoWindowOfMarker:
: viene chiamata dopo una pressione prolungata sulla finestra informativa di un indicatore.
Per ascoltare gli eventi, è necessario 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 delle finestre di informazioni:
Finestre informative personalizzate
Personalizza i contenuti delle finestre informative creando una sottoclasse di
UIView
che definisce il layout della finestra informativa personalizzata. In questa sottoclasse,
definisci la visualizzazione come preferisci. Ad esempio, puoi utilizzare istanze personalizzate di UILabel
per visualizzare il testo del titolo e dello snippet e altre visualizzazioni, come le istanze di UIImageView
, per aggiungere le immagini visualizzate nella finestra informativa.
Assicurati che ViewController
implementi il protocollo
GMSIndoorDisplayDelegate
e definisca un listener per l'evento
mapView:markerInfoWindow:. Questo listener di eventi viene chiamato quando un indicatore sta per essere selezionato e ti consente di restituire un'istanza della tua classe UIView
personalizzata per definire la finestra informativa personalizzata utilizzata dall'indicatore.
Le immagini seguenti mostrano una finestra informativa predefinita, una finestra informativa con contenuti personalizzati e una finestra informativa con riquadro e sfondo personalizzati.
Gli esempi di codice su GitHub forniti con Maps SDK for iOS includono esempi di finestre di informazioni 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.