Événements

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Sélectionnez une plate-forme: Android iOS JavaScript

Le SDK Maps pour iOS vous permet d'écouter des événements qui se produisent sur la carte, tels que les événements de changement de caméra ou les événements d'appui sur un repère.

Introduction

Pour écouter des événements, vous devez implémenter le protocole GMSMapViewDelegate. En règle générale, vous implémentez ce protocole sur le contrôleur de vue qui affiche la carte. Vous trouverez un exemple ci-dessous. :

Swift

import GoogleMaps

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

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

Une fois le fichier GMSMapView créé, vous pouvez définir son délégué sur votre contrôleur de vue. GMSMapViewDelegate ne fournit que des méthodes facultatives. Pour écouter un événement particulier, vous devez implémenter la méthode appropriée.

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

Position de la caméra

À l'aide de GMSMapViewDelegate, vous pouvez écouter les modifications de la position de la caméra utilisée pour afficher la carte. Il existe trois événements différents.

  • mapView:willMove: indique que la position de la caméra est sur le point de changer. Si l'argument gesture est défini sur YES, cela est dû au fait qu'un utilisateur effectue un geste naturel sur le GMSMapView, comme un panoramique ou une inclinaison. Sinon, NO indique qu'il s'agit d'une modification programmatique, par exemple via des méthodes telles que animateToCameraPosition: ou la mise à jour directe du calque de la carte. Il peut également s'agir de NO si un utilisateur a appuyé sur les boutons Ma position ou sur une boussole, qui génèrent des animations modifiant l'appareil photo.

    Cette méthode peut être appelée plusieurs fois avant l'appel de mapView:idleAtCameraPosition:, bien qu'elle ne se produise généralement que si des animations et des gestes se produisent en même temps. Un geste annule toute animation actuelle, par exemple, et appelle mapView:willMove: une seconde fois.

  • mapView:didChangeCameraPosition: est appelé plusieurs fois lors d'un geste ou d'une animation, toujours après un appel à mapView:willMove:. La position intermédiaire de la caméra est transmise.

  • Enfin, mapView:idleAtCameraPosition: est invoqué une fois que la position de la caméra sur GMSMapView devient inactive et spécifie la position appropriée de la caméra. À ce stade, toutes les animations et tous les gestes ont cessé.

    Les applications peuvent utiliser cet événement pour déclencher l'actualisation des repères ou d'autres contenus affichés sur le GMSMapView, plutôt que de recharger le contenu à chaque changement de caméra, par exemple.

Par exemple, une application peut effacer le GMSMapView en mouvement, puis inverser le géocodage pour la position sur laquelle l'appareil photo s'arrête.

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

Événements liés aux établissements et aux autres points d'intérêt

Par défaut, les points d'intérêt (POI) sont affichés sur la carte de base avec les icônes qui leur correspond. Les POI comprennent d'une part les parcs, écoles, bâtiments administratifs, etc., et d'autre part les POI commerciaux (magasins, restaurants et hôtels, par exemple).

Vous pouvez répondre aux événements de clic sur un POI. Consultez le guide dédié aux établissements et autres points d'intérêt.

Autres événements

Pour en savoir plus sur la liste complète des méthodes sur GMSMapViewDelegate, consultez le guide de référence.