Ereignisse

Plattform auswählen: Android iOS JavaScript

Mit dem Maps SDK for iOS können Sie auf Ereignisse warten, die im z. B. Kameraänderungsereignisse oder das Antippen von Markierungen.

Einführung

Um auf Ereignisse zu warten, müssen Sie den GMSMapViewDelegate-Protokoll. In der Regel implementieren Sie Protokoll auf dem Ansichts-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
      

Nachdem die GMSMapView erstellt wurde, können Sie ihren Delegaten auf Ihren View-Controller festlegen. GMSMapViewDelegate bietet nur optionale Methoden. Zuhören auf ein bestimmtes Ereignis verweisen, 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 dem GMSMapViewDelegate kannst du Änderungen der Kameraposition mithören zum Rendern der Karte verwendet wird. Es können drei verschiedene Ereignisse auftreten.

  • mapView:willMove: gibt an, dass sich die Kameraposition ändert. Wenn das Argument gesture auf YES gesetzt ist, liegt das daran, dass der Nutzer eine natürliche Geste auf dem GMSMapView, z. B. Schwenken oder Neigen Andernfalls gibt NO an, dass dies Teil einer programmatischen Änderung ist. z. B. über Methoden wie animateToCameraPosition: oder durch Aktualisieren der die Ebene der Karte direkt hinzugefügt werden. Der Wert kann auch NO lauten, wenn ein Nutzer auf das Symbol "Meine Standort- oder Kompassschaltflächen, die Animationen generieren, die den Kamera.

    Diese Methode kann mehrmals vor mapView:idleAtCameraPosition: wird aufgerufen, obwohl dies normalerweise geschieht nur, wenn Animationen und Gesten gleichzeitig auftreten - eine Geste bricht beispielsweise die aktuelle Animation ab und ruft mapView:willMove: ein zweites Mal.

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

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

    Anwendungen können dieses Ereignis verwenden, um eine Aktualisierung von Markierungen oder anderen Inhalte, die im GMSMapView angezeigt werden, statt z. B. den Inhalt bei jeder Kameraänderung aktualisieren.

Eine Anwendung kann beispielsweise die GMSMapView bei Bewegungen löschen und dann die Position, an der die Kamera zum Stillstand kommt, per Reverse-Geocoding ermitteln.

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 Click-Events auf einen POI reagieren. Weitere Informationen finden Sie im Leitfaden zur Unternehmen und andere POIs.

Weitere Ereignisse

Eine vollständige Liste der Methoden in GMSMapViewDelegate finden Sie unter Leitfaden.