Ereignisse

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Plattform auswählen: Android iOS JavaScript

Mit dem Maps SDK for iOS können Sie Ereignisse auf der Karte erfassen, z. B. Ereignisse beim Kamerawechsel oder das Antippen von Markierungen.

Einführung

Wenn Sie Ereignisse erfassen möchten, müssen Sie das GMSMapViewDelegate-Protokoll implementieren. Normalerweise implementieren Sie dieses Protokoll auf dem Ansicht-Controller, der die Karte anzeigt. Ein Beispiel dafür sehen Sie unten:

Swift

import GoogleMaps

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

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

Beim Erstellen von GMSMapView können Sie den Bevollmächtigten auf Ihren Ansicht-Controller festlegen. GMSMapViewDelegate bietet nur optionale Methoden. Wenn Sie auf ein bestimmtes Ereignis warten möchten, müssen Sie die entsprechende Methode implementieren.

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

Kameraposition

Mit GMSMapViewDelegate kannst du Änderungen an der Kameraposition erfassen, die zum Rendern der Karte verwendet wurde. Es können drei verschiedene Ereignisse auftreten.

  • mapView:willMove: gibt an, dass sich die Kameraposition ändern wird. Wenn das Argument gesture auf YES gesetzt ist, liegt dies daran, dass ein Nutzer eine natürliche Geste über das GMSMapView ausführt, z. B. Schwenken oder Neigen. Andernfalls gibt NO an, dass dies Teil einer programmatischen Änderung ist, z. B. über Methoden wie animateToCameraPosition: oder durch direktes Aktualisieren der Karte. Der Wert kann auch NO lauten, wenn ein Nutzer auf die Schaltfläche „Mein Standort“ oder die Kompassschaltfläche getippt hat. Dadurch werden Animationen generiert, die die Kamera ändern.

    Diese Methode kann mehrmals aufgerufen werden, bevor mapView:idleAtCameraPosition: aufgerufen wird. Dies geschieht jedoch normalerweise nur, wenn Animationen und Gesten gleichzeitig ausgeführt werden. Durch eine Geste wird beispielsweise alle aktuellen Animationen abgebrochen und mapView:willMove: ein zweites Mal aufgerufen.

  • mapView:didChangeCameraPosition: wird während einer Geste oder Animation wiederholt, immer nach einem Aufruf von mapView:willMove:. Sie wird an die Kamera-Zwischenposition übergeben.

  • Schließlich wird mapView:idleAtCameraPosition: aufgerufen, sobald die Kameraposition auf GMSMapView inaktiv wird, und gibt die entsprechende Kameraposition an. An diesem Punkt finden keine Animationen und Gesten mehr statt.

    Die Anwendungen können dieses Ereignis verwenden, um eine Aktualisierung von Markierungen oder anderen Inhalten zu veranlassen, die auf GMSMapView angezeigt werden, anstatt beispielsweise den Inhalt bei jeder Kameraänderung neu zu laden.

Beispielsweise kann eine Anwendung GMSMapView beim Bewegen löschen und dann die Position umkehren, auf der die Kamera stehen bleibt.

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

Ereignisse bei Unternehmen und anderen POIs

Standardmäßig werden Points of Interest (POIs) zusammen mit ihren Icons auf der Karte dargestellt. POIs sind beispielsweise Parks, Schulen, Behördengebäude und mehr sowie Wirtschaftsunternehmen wie Geschäfte, Restaurants oder Hotels.

Sie können auf Klickereignisse auf einen POI reagieren. Weitere Informationen findest du unter Unternehmen und andere POIs.

Weitere Ereignisse

Eine vollständige Liste der Methoden unter GMSMapViewDelegate findest du im Referenzhandbuch.