iOS için Haritalar SDK'sını kullanarak harita üzerinde gerçekleşen kamera değiştirme etkinlikleri veya işaretçiye dokunma etkinlikleri gibi etkinlikleri dinleyebilirsiniz.
Giriş
Etkinlikleri dinlemek için GMSMapViewDelegate
protokolünü uygulamanız gerekir. Bu protokolü genellikle haritayı görüntüleyen görünüm denetleyicisine 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 sağlar. 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
ile, haritayı oluşturmak için kullanılan kamera konumundaki değişiklikleri dinleyebilirsiniz. Üç ayrı etkinlik vardır.
mapView:willMove:
, kamera konumunun değişmek üzere olduğunu gösterir.gesture
bağımsız değişkeniYES
olarak ayarlanmışsa kullanıcınınGMSMapView
üzerinde kaydırma veya eğme gibi doğal bir hareket yapması nedeniyledir. Aksi takdirdeNO
, bunun programatik bir değişikliğin parçası olduğunu gösterir (ör.animateToCameraPosition:
gibi yöntemler veya haritanın katmanının doğrudan güncellenmesi). Kullanıcı, kamerayı değiştiren animasyonlar oluşturan Konumum veya pusula düğmelerine dokunduysa da bu durumNO
olabilir.Bu yöntem,
mapView:idleAtCameraPosition:
çağrılmadan önce birkaç kez çağrılabilir. Ancak bu genellikle yalnızca animasyonlar ve hareketler aynı anda gerçekleşirse gerçekleşir. Örneğin, bir hareket mevcut animasyonu iptal eder vemapView:willMove:
'ı ikinci kez çağırır.mapView:didChangeCameraPosition:
, bir hareket veya animasyon sırasında her zamanmapView:willMove:
çağrıldıktan sonra tekrar tekrar çağrılır. Ara kamera konumu iletilir.Son olarak,
GMSMapView
cihazındaki kamera konumu boşta olduğundamapView:idleAtCameraPosition:
çağrılır ve ilgili kamera konumu belirtilir. Bu noktada tüm animasyonlar ve hareketler durdurulur.Uygulamalar, örneğin her kamera değişikliğinde içeriği yeniden yüklemek yerine
GMSMapView
'te gösterilen işaretçilerin veya diğer içeriğin yenilenmesini tetiklemek için bu etkinliği kullanabilir.
Örneğin, bir uygulama hareket halindeyken GMSMapView
değerini temizleyebilir ve ardından kameranın durduğu konumun ters coğrafi kodunu oluşturabilir.
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]; }
İşletmelerde ve diğer önemli yerlerdeki etkinlikler
İlgi çekici yerler (ÖY), varsayılan olarak temel haritada ilgili simgeleriyle birlikte gösterilir. ÖY'ler arasında parklar, okullar, resmi binalar ve mağazalar, restoranlar, oteller gibi iş ÖY'leri yer alır.
Önemli yerlerdeki tıklama etkinliklerine yanıt verebilirsiniz. İşletmeler ve diğer önemli yerler kılavuzuna bakın.
Diğer etkinlikler
GMSMapViewDelegate
'teki yöntemlerin tam listesi hakkında bilgi edinmek için referans kılavuzunu inceleyin.