Ventanas de información

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.
Seleccionar plataforma: Android iOS JavaScript

Ventana de información que aparece sobre un marcador

Una ventana de información te permite mostrar información al usuario cuando presiona un marcador.

Las ventanas de información se dibujan orientadas respecto de la pantalla del dispositivo y centradas encima del marcador asociado. La ventana de información predeterminada contiene el título en negrita, con el texto del fragmento debajo.

El contenido de la ventana de información se define mediante las propiedades title y snippet del marcador. Si haces clic en el marcador, no se mostrará una ventana de información si las propiedades title y snippet están en blanco o nil.

Solo se muestra una de estas ventanas a la vez. Si un usuario presiona otro marcador, se ocultará la ventana actual y se abrirá la nueva ventana de información. Si el usuario hace clic en un marcador que actualmente muestra una ventana de información, esta se cierra y se vuelve a abrir.

Crea una ventana de información personalizada para agregar texto o imágenes adicionales. Una ventana de información personalizada te brinda control total sobre la apariencia de la ventana emergente.

Agrega una ventana de información

En el siguiente fragmento, se crea un marcador simple que solo tiene un título para el texto de la ventana de información.

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 propiedad snippet, puedes agregar texto adicional que aparecerá debajo del título en una fuente más pequeña. Las strings más extensas que el ancho de la ventana de información se unen automáticamente en varias líneas. Es posible que los mensajes muy largos estén truncados.

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;
      

Mostrar/ocultar una ventana de información

Las ventanas de información están diseñadas para responder a los eventos táctiles del usuario en el marcador. Puedes ocultar o mostrar una ventana de información de manera programática si configuras la propiedad selectedMarker de GMSMapView:

  • Establece selectedMarker en el nombre del marcador para mostrarlo.
  • Establece selectedMarker en nil para ocultarlo.

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;
      

Cómo configurar una ventana de información para que se actualice automáticamente

Configura tracksInfoWindowChanges en el marcador como YES o true si deseas que las propiedades nuevas o el contenido de la ventana de información se muestren de inmediato cuando se modifiquen, en lugar de tener que esperar a que la ventana de información se oculte y volver a mostrarse. El valor predeterminado es NO o false.

Swift

london.tracksInfoWindowChanges = true
      

Objective‑C

london.tracksInfoWindowChanges = YES;
      

Para decidir cuándo configurar la propiedad tracksInfoWindowChanges, debes comparar las consideraciones de rendimiento con las ventajas de que la ventana de información se vuelva a dibujar de forma automática. Por ejemplo:

  • Si tienes que realizar una serie de cambios, puedes cambiar la propiedad a YES y, luego, a NO.
  • Cuando se ejecuta una animación o los contenidos se cargan de forma asíncrona, debes establecer la propiedad en YES hasta que se completen las acciones.

Consulta también las notas para tener en cuenta cuando uses la propiedad iconView del marcador.

Cómo cambiar la posición de una ventana de información

Las ventanas de información siempre se dibujan respecto de la pantalla del dispositivo, centradas encima del marcador asociado. Puedes modificar la posición de la ventana de información en relación con el marcador configurando la propiedad infoWindowAnchor. Esta propiedad acepta un objeto CGPoint, definido como un desplazamiento (x,y) en el que x e y varían entre 0.0 y 1.0. El desplazamiento predeterminado es (0.5, 0.0), es decir, la parte central superior. Establecer el desplazamiento de infoWindowAnchor es útil para alinear la ventana de información con un ícono personalizado.

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;
      

Cómo controlar eventos en ventanas de información

Puedes escuchar los siguientes eventos de la ventana de información:

Para escuchar eventos, debes implementar el protocolo GMSMapViewDelegate. Consulta la guía de eventos y la lista de métodos de GMSMapViewDelegate.

GitHub incluye ejemplos que muestran cómo controlar los eventos de la ventana de información:

Ventanas de información personalizadas

Para personalizar el contenido de las ventanas de información, crea una subclase de UIView que defina el diseño de la ventana de información personalizada. En esa subclase, define la vista como quieras. Por ejemplo, puedes usar instancias UILabel personalizadas para mostrar el título y el texto del fragmento, y otras vistas, como las instancias UIImageView, a fin de agregar imágenes que se muestran en la ventana de información.

Asegúrate de que tu ViewController implemente el protocolo GMSIndoorDisplayDelegate y defina un objeto de escucha para el evento mapView:markerInfoWindow:. Se llama a este objeto de escucha de eventos cuando se selecciona un marcador, y te permite mostrar una instancia de tu clase UIView personalizada para definir la ventana de información personalizada que usa el marcador.

En las siguientes imágenes, se muestran tres ventanas de información: una predeterminada, otra con contenido personalizado y otra con el marco y el fondo personalizados.

Comparación de las distintas ventanas de información

Las muestras de código en GitHub proporcionadas con el SDK de Maps para iOS incluyen muestras de ventanas de información personalizadas. Por ejemplo, consulta la definición de MarkerInfoWindowViewController.m (Objective-C) o MarkerInfoWindowViewController.swift (Swift).

Consulta las muestras de código para obtener información sobre cómo descargar y ejecutar estas muestras.