Con el SDK de Maps para iOS, puedes escuchar los eventos que ocurren en la como eventos de cambio de cámara o de presión de marcadores.
Introducción
Para escuchar eventos, debes implementar el
Protocolo GMSMapViewDelegate
. Por lo general, implementas
este protocolo en el controlador de vista que muestra el mapa. A continuación, se muestra un ejemplo.
Swift
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
Cuando se crea el GMSMapView
, puedes configurar el delegado de tu vista
responsable del tratamiento de datos. GMSMapViewDelegate
solo proporciona métodos opcionales. Para escuchar
a cualquier evento en particular, debes
implementar el método relevante.
Swift
override func loadView() { super.loadView() let camera = GMSCameraPosition.camera( withLatitude: 1.285, longitude: 103.848, zoom: 12 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } // MARK: GMSMapViewDelegate func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { print("You tapped at \(coordinate.latitude), \(coordinate.longitude)") }
Objective-C
- (void)loadView { [super loadView]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285 longitude:103.848 zoom:12]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate { NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude); }
Posición de la cámara
Con el GMSMapViewDelegate
, puedes escuchar los cambios en la posición de la cámara
que se usa para renderizar el mapa. Existen tres eventos diferentes:
mapView:willMove:
indica que la posición de la cámara está a punto de cambiar. Si el argumentogesture
se establece enYES
, esto se debe a que un usuario realiza un gesto natural enGMSMapView
, como un desplazamiento o una inclinación. De lo contrario,NO
indica que esto es parte de un cambio programático. Por ejemplo, a través de métodos comoanimateToCameraPosition:
o actualizar el directamente a la capa del mapa. También puede serNO
si un usuario presionó el botón My Botones de ubicación o brújula, que generan animaciones que cambian la cámara.Se puede llamar a este método varias veces antes Se invoca
mapView:idleAtCameraPosition:
, aunque esto, por lo general, ocurre solo si las animaciones y los gestos ocurren al mismo tiempo: un gesto cancelará la animación actual, por ejemplo, y llamarámapView:willMove:
por segunda vez.Se llama a
mapView:didChangeCameraPosition:
repetidamente durante un gesto o animación, siempre después de una llamada amapView:willMove:
. Se le pasa el posición intermedia de la cámara.Por último, se invoca
mapView:idleAtCameraPosition:
una vez que la posición de la cámara enGMSMapView
queda inactivo y especifica la posición relevante de la cámara. En este punto, las animaciones y los gestos se encuentran detenidos en su totalidad.Las aplicaciones pueden usar este evento para activar una actualización de marcadores y otras el contenido que se muestra en
GMSMapView
, en lugar de, por ejemplo, y vuelve a cargar el contenido en cada cambio de cámara.
Por ejemplo, una aplicación puede borrar el GMSMapView
en movimiento y, luego,
realizar un geocodificación inversa de la posición en la que se detiene la cámara.
Swift
let geocoder = GMSGeocoder() func mapView(_ mapView: GMSMapView, willMove gesture: Bool) { mapView.clear() } func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) { geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in guard error == nil else { return } if let result = response?.firstResult() { let marker = GMSMarker() marker.position = cameraPosition.target marker.title = result.lines?[0] marker.snippet = result.lines?[1] marker.map = mapView } } }
Objective-C
GMSGeocoder *geocoder; - (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture { [mapView clear]; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition { id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) { if (error != nil) { return; } GMSReverseGeocodeResult *result = response.firstResult; GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target]; marker.title = result.lines[0]; marker.snippet = result.lines[1]; marker.map = mapView; }; [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler]; }
Eventos en empresas y otros lugares de interés
De forma predeterminada, los puntos de interés (POI) aparecen en el mapa básico con sus íconos correspondientes. Entre los POI se encuentran los parques, las escuelas y los edificios gubernamentales, además de POI de negocios, como tiendas, restaurantes y hoteles.
Puedes responder a eventos de clic en un lugar de interés. Consulta la guía sobre empresas y otros lugares de interés.
Otros eventos
Para obtener información sobre la lista completa de métodos en GMSMapViewDelegate
, consulta
la guía de referencia.