Le SDK Maps pour iOS vous permet d'écouter des événements qui se produisent sur la comme les changements de caméra ou les appuis sur un repère.
Introduction
Pour écouter des événements, vous devez implémenter la classe
Protocole GMSMapViewDelegate
. En règle générale, vous mettez en œuvre
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 GMSMapView
créé, vous pouvez définir son délégué sur votre vue.
contrôleur. GMSMapViewDelegate
ne fournit que des méthodes facultatives. À écouter
à tout é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
Avec GMSMapViewDelegate
, vous pouvez écouter les changements de position de la caméra.
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'argumentgesture
est défini surYES
, cela est dû au fait qu'un utilisateur effectue un geste naturel sur leGMSMapView
, comme un panoramique ou une inclinaison. Sinon,NO
indique qu'il s'agit d'une modification programmatique. (par exemple, via des méthodes telles queanimateToCameraPosition:
) ou en mettant à jour directement au calque de la carte. Elle peut également êtreNO
si un utilisateur a appuyé sur l'icône Les boutons de position ou de boussole, qui génèrent des animations qui modifient la caméra.Cette méthode peut être appelée plusieurs fois avant
mapView:idleAtCameraPosition:
est appelé, bien que cette méthode se produit uniquement si les animations et les gestes se produisent en même temps : un geste annulera toute animation en cours, par exemple, et appelleramapView:willMove:
une deuxième fois.mapView:didChangeCameraPosition:
est appelé de manière répétée pendant un geste ou une animation, toujours après un appel àmapView:willMove:
. La fonction position intermédiaire de la caméra.Enfin,
mapView:idleAtCameraPosition:
est appelé une fois que la caméra est positionnée surGMSMapView
devient inactif et spécifie la position pertinente 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 une actualisation des repères ou d'autres contenus affichés sur le
GMSMapView
, plutôt que, par exemple, de recharger le contenu à chaque changement de caméra.
Par exemple, une application peut effacer GMSMapView
lors de son déplacement, puis
le géocode inversé de la position sur laquelle la caméra doit s'appuyer.
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 pour des établissements et autres points d'intérêt.
Autres événements
Pour obtenir la liste complète des méthodes sur GMSMapViewDelegate
, consultez
le guide de référence.