Peristiwa

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Pilih platform: Android iOS JavaScript

Dengan menggunakan Maps SDK for iOS, Anda dapat memproses peristiwa yang terjadi di peta, seperti peristiwa perubahan kamera atau peristiwa ketuk penanda.

Pengantar

Untuk memproses peristiwa, Anda harus mengimplementasikan protokol GMSMapViewDelegate. Biasanya, Anda menerapkan protokol ini pada pengontrol tampilan yang menampilkan peta. Berikut contohnya:

Swift

import GoogleMaps

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

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

Saat GMSMapView dibuat, Anda dapat menetapkan delegasinya ke pengontrol tampilan. GMSMapViewDelegate hanya menyediakan metode opsional. Untuk memproses peristiwa tertentu, Anda harus mengimplementasikan metode yang relevan.

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

Posisi kamera

Dengan menggunakan GMSMapViewDelegate, Anda dapat memproses perubahan pada posisi kamera yang digunakan untuk merender peta. Ada tiga macam kejadian.

  • mapView:willMove: menunjukkan bahwa posisi kamera akan berubah. Jika argumen gesture ditetapkan ke YES, hal ini disebabkan oleh pengguna yang melakukan gestur alami pada GMSMapView, seperti menggeser atau kemiringan. Jika tidak, NO akan menunjukkan bahwa ini adalah bagian dari perubahan terprogram - misalnya, melalui metode seperti animateToCameraPosition: atau memperbarui lapisan peta secara langsung. Nilai ini juga dapat berupa NO jika pengguna telah mengetuk Lokasi Saya atau tombol kompas, yang menghasilkan animasi yang mengubah kamera.

    Metode ini dapat dipanggil beberapa kali sebelum mapView:idleAtCameraPosition: dipanggil, meskipun hal ini biasanya hanya terjadi jika animasi dan gestur terjadi pada saat yang sama - gestur akan membatalkan animasi saat ini, misalnya, dan akan memanggil mapView:willMove: untuk kedua kalinya.

  • mapView:didChangeCameraPosition: dipanggil berulang kali selama gestur atau animasi, selalu setelah panggilan ke mapView:willMove:. Ini meneruskan posisi kamera perantara.

  • Terakhir, mapView:idleAtCameraPosition: dipanggil setelah posisi kamera di GMSMapView menjadi tidak ada aktivitas, dan menentukan posisi kamera yang relevan. Pada titik ini, semua animasi dan isyarat telah berhenti.

    Aplikasi dapat menggunakan peristiwa ini untuk memicu refresh penanda atau konten lain yang ditampilkan di GMSMapView, bukan, misalnya, memuat ulang konten setiap kali kamera berubah.

Misalnya, aplikasi dapat menghapus GMSMapView yang sedang bergerak, lalu membalikkan geocode posisi penempatan 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];
}
      

Peristiwa tentang bisnis dan lokasi menarik lainnya

Secara default, tempat menarik (POI) muncul pada peta dasar bersama ikonnya. POI meliputi taman, sekolah, gedung pemerintahan, dan sebagainya, serta POI bisnis seperti toko, restoran, dan hotel.

Anda dapat merespons peristiwa klik pada POI. Lihat panduan untuk bisnis dan lokasi menarik lainnya.

Peristiwa lain

Untuk mempelajari daftar lengkap metode pada GMSMapViewDelegate, lihat panduan referensi.