Wydarzenia

Wybierz platformę: Android iOS JavaScript

Korzystając z pakietu SDK Maps na iOS, możesz nasłuchiwać zdarzeń, które odbywają się w takie jak zdarzenia zmiany kamery czy kliknięcia znacznika.

Wprowadzenie

Aby nasłuchiwać zdarzeń, musisz zaimplementować funkcję Protokół GMSMapViewDelegate. Zwykle implementujesz ten protokół na kontrolerze widoku danych, który wyświetla mapę. Oto przykład:

Swift

import GoogleMaps

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

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

Po utworzeniu GMSMapView możesz ustawić jego delegata na kontrolerze widoku. GMSMapViewDelegate udostępnia tylko metody opcjonalne. Do słuchania do dowolnego zdarzenia, musisz zastosować odpowiednią metodę.

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

Pozycja kamery

Za pomocą urządzenia GMSMapViewDelegate możesz nasłuchiwać zmian pozycji kamery używane do renderowania mapy. Istnieją 3 różne zdarzenia.

  • mapView:willMove: oznacza, że pozycja kamery wkrótce się zmieni. Jeśli argument gesture ma wartość YES, oznacza to, że użytkownik wykonuje działanie naturalny gest na GMSMapView, taki jak przesuwanie lub przechylanie. W przeciwnym razie NO oznacza, że jest to część zmiany automatycznej – np. za pomocą metod takich jak animateToCameraPosition: lub aktualizacji do warstwy mapy. Może to być również wartość NO, jeśli użytkownik kliknął kartę Moje przycisków lokalizacji lub kompasu, które generują animacje zmieniające aparat fotograficzny.

    Ta metoda może być wywoływana kilka razy wcześniej, Funkcja mapView:idleAtCameraPosition: jest wywoływana, ale zwykle jest to wywołanie dzieje się tylko wtedy, gdy w tym samym czasie występują animacje i gesty – gest; spowoduje na przykład anulowanie bieżącej animacji i wywołanie mapView:willMove: po raz drugi.

  • Funkcja mapView:didChangeCameraPosition: jest wywoływana wielokrotnie podczas gestu lub animacja, zawsze po wywołaniu funkcji mapView:willMove:. Jest zaliczany do w pozycji pośredniej.

  • Na koniec funkcja mapView:idleAtCameraPosition: jest wywoływana po ustawieniu pozycji kamery. urządzenia GMSMapView stanie się nieaktywne i określa odpowiednie położenie kamery. Od tego momentu wszystkie animacje i gesty zostały zatrzymane.

    Aplikacje mogą używać tego zdarzenia do wywołania odświeżania znaczników lub innych wyświetlanych w witrynie GMSMapView, a nie na przykład ładowanie treści po każdej zmianie kamery.

Na przykład aplikacja może wyczyścić pole GMSMapView podczas przenoszenia, a następnie: odwrócić geokodowanie na pozycji, na której spoczywa kamera.

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

Wydarzenia w firmach i innych ciekawych miejscach

Domyślnie ciekawe miejsca (POI) są wyświetlane na mapie podstawowej wraz z odpowiednimi ikonami. Ważne miejsca obejmują parki, szkoły, budynki administracji publicznej i inne miejsca, a także miejsca związane z biznesem, takie jak sklepy, restauracje i hotele.

Możesz odpowiadać na zdarzenia kliknięcia związane z ważnym miejscem. Zobacz przewodnik firm i innych ciekawych miejsc.

Inne zdarzenia

Aby poznać pełną listę metod w GMSMapViewDelegate, zobacz przewodnika.