Eventi

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Seleziona piattaforma: Android iOS JavaScript

Se utilizzi l'SDK Maps per iOS, puoi ascoltare gli eventi che si verificano sulla mappa, ad esempio gli eventi di modifica della fotocamera o gli eventi tocco dell'indicatore.

Introduzione

Per ascoltare gli eventi devi implementare il protocollo GMSMapViewDelegate. In genere, implementi questo protocollo sul controller della vista che mostra la mappa. Di seguito è riportato un esempio:

Swift

import GoogleMaps

class Events: UIViewController, GMSMapViewDelegate {
  // ...
}
      

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

Quando viene creato il GMSMapView, puoi impostarne il delegato sul controller di visualizzazione. GMSMapViewDelegate fornisce solo metodi facoltativi. Per ascoltare un determinato evento, devi implementare il metodo pertinente.

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);
}
      

Posizione fotocamera

Con GMSMapViewDelegate puoi ascoltare le modifiche alla posizione della fotocamera utilizzate per il rendering della mappa. Ci sono tre eventi distinti.

  • mapView:willMove: indica che la posizione della fotocamera sta per cambiare. Se l'argomento gesture è impostato su YES, significa che un utente esegue un gesto naturale su GMSMapView, ad esempio una panoramica o un'inclinazione. In caso contrario, NO indica che fa parte di una modifica programmatica, ad esempio tramite metodi come animateToCameraPosition: o aggiornando direttamente il livello della mappa. Potrebbe anche essere NO se un utente ha toccato i pulsanti La mia posizione o la bussola, che genera animazioni che cambiano la fotocamera.

    Questo metodo può essere richiamato più volte prima che venga richiamato mapView:idleAtCameraPosition:, anche se in genere questo accade solo se si verificano animazioni e gesti contemporaneamente - un gesto annulla, ad esempio, qualsiasi animazione corrente e richiama mapView:willMove: una seconda volta.

  • mapView:didChangeCameraPosition: viene chiamato ripetutamente durante un gesto o un'animazione, sempre dopo una chiamata a mapView:willMove:. Ha superato la posizione intermedia della fotocamera.

  • Infine, mapView:idleAtCameraPosition: viene richiamato quando la posizione della fotocamera su GMSMapView diventa inattiva e specifica la posizione della fotocamera pertinente. A questo punto, tutte le animazioni e i gesti sono stati interrotti.

    Le applicazioni possono utilizzare questo evento per attivare un aggiornamento degli indicatori o di altri contenuti visualizzati sul dispositivo GMSMapView, anziché, ad esempio, per ricaricare i contenuti a ogni cambio della videocamera.

Ad esempio, un'applicazione può cancellare il dispositivo GMSMapView in movimento e poi invertire il codice geografico nella posizione in cui si trova la videocamera.

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];
}
      

Eventi relativi ad attività e altri punti di interesse

Per impostazione predefinita, i punti di interesse (PDI) vengono visualizzati sulla mappa di base insieme alle icone corrispondenti. I PDI includono parchi, scuole, edifici governativi e altro ancora, oltre a PDI aziendali come negozi, ristoranti e hotel.

Puoi rispondere agli eventi di clic su un PDI. Consulta la guida alle attività e ad altri punti di interesse.

Altri eventi

Per informazioni sull'elenco completo dei metodi su GMSMapViewDelegate, consulta la guida di riferimento.