iOS için Haritalar SDK'sını kullanarak haritada meydana gelen etkinlikleri (ör. kamera değişikliği etkinlikleri veya işaretçi dokunma etkinlikleri) dinleyebilirsiniz.
Giriş
Etkinlikleri dinlemek için GMSMapViewDelegate
protokolünü uygulamanız gerekir. Genellikle bu protokolü, haritayı görüntüleyen görünüm denetleyicisinde uygularsınız. Aşağıda bir örnek verilmiştir:
Swift
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
GMSMapView
oluşturulduğunda temsilcisini görünüm denetleyicinize ayarlayabilirsiniz. GMSMapViewDelegate
yalnızca isteğe bağlı yöntemler sunar. Belirli bir etkinliği dinlemek için ilgili yöntemi uygulamanız gerekir.
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); }
Kamera konumu
GMSMapViewDelegate
özelliğini kullanarak, haritayı oluşturmak için kullanılan kamera konumundaki değişiklikleri dinleyebilirsiniz. Üç farklı etkinlik vardır.
mapView:willMove:
, kamera konumunun değişmek üzere olduğunu gösterir.gesture
bağımsız değişkeniYES
olarak ayarlanırsa bunun nedeni, kullanıcınınGMSMapView
üzerinde kaydırma veya eğme gibi doğal bir hareket yapmasıdır. Aksi takdirde,NO
bu değişikliğin programatik bir değişikliğin parçası olduğunu gösterir. Örneğin,animateToCameraPosition:
gibi yöntemlerle veya haritanın katmanını doğrudan güncelleyerek. Kullanıcı, kamerayı değiştiren animasyonlar oluşturan Konumum veya pusula düğmelerine dokunduğunda da bu durumNO
olabilir.Bu yöntem,
mapView:idleAtCameraPosition:
çağrılmadan önce birkaç kez çağrılabilir. Ancak bu durum genellikle yalnızca animasyonlar ve hareketler aynı anda gerçekleştiğinde olur. Örneğin, bir hareket mevcut animasyonları iptal eder vemapView:willMove:
'yi ikinci kez çağırır.mapView:didChangeCameraPosition:
, bir hareket veya animasyon sırasında tekrar tekrar çağrılır ve her zamanmapView:willMove:
çağrısından sonra çağrılır. Ara kamera konumu iletilir.Son olarak,
GMSMapView
üzerindeki kamera konumu boşta kaldığındamapView:idleAtCameraPosition:
çağrılır ve ilgili kamera konumu belirtilir. Bu noktada tüm animasyonlar ve hareketler durdurulur.Uygulamalar, bu etkinliği kullanarak
GMSMapView
üzerinde gösterilen işaretçilerin veya diğer içeriklerin yenilenmesini tetikleyebilir. Örneğin, her kamera değişikliğinde içeriği yeniden yüklemek yerine bu etkinliği kullanabilirler.
Örneğin, bir uygulama hareket halindeyken GMSMapView
öğesini temizleyebilir ve ardından kameranın durduğu konumu ters coğrafi kodlayabilir.
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]; }
İşletmeler ve diğer önemli yerlerle ilgili etkinlikler
Varsayılan olarak, ilgi çekici yerler (İÇY'ler) temel haritada ilgili simgeleriyle birlikte gösterilir. Önemli yerler arasında parklar, okullar, devlet binaları ve daha fazlasının yanı sıra mağazalar, restoranlar ve oteller gibi işletme ÖY'leri yer alır.
Bir ÖY'deki tıklama etkinliklerine yanıt verebilirsiniz. İşletmeler ve diğer ilgi çekici yerler hakkındaki kılavuza göz atın.
Diğer etkinlikler
GMSMapViewDelegate
üzerindeki yöntemlerin tam listesi hakkında bilgi edinmek için referans kılavuzuna bakın.