Dengan menggunakan Maps SDK for iOS, Anda dapat memproses peristiwa yang terjadi pada peta, seperti peristiwa perubahan kamera atau peristiwa ketukan penanda.
Pengantar
Untuk memproses peristiwa, Anda harus mengimplementasikan protokol GMSMapViewDelegate
. Biasanya, Anda akan mengimplementasikan protokol ini pada pengontrol tampilan yang menampilkan peta. Berikut adalah contohnya:
Swift
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
Setelah 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 argumengesture
disetel keYES
, hal ini disebabkan oleh pengguna yang melakukan gestur alami padaGMSMapView
, seperti menggeser atau memiringkan. Jika tidak,NO
menunjukkan bahwa ini adalah bagian dari perubahan terprogram - misalnya, melalui metode sepertianimateToCameraPosition:
atau memperbarui lapisan peta secara langsung. Ini juga dapat berupaNO
jika pengguna telah mengetuk Lokasiku 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 bersamaan - misalnya, gestur akan membatalkan animasi yang sedang berlangsung, dan akan memanggilmapView:willMove:
untuk kedua kalinya.mapView:didChangeCameraPosition:
dipanggil berulang kali selama gestur atau animasi, selalu setelah panggilan kemapView:willMove:
. Posisi kamera tengah diteruskan.Terakhir,
mapView:idleAtCameraPosition:
dipanggil setelah posisi kamera padaGMSMapView
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
saat 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 di GMSMapViewDelegate
, lihat
panduan referensi.