iOS için Haritalar SDK'sını kullanarak kamera değiştirme etkinlikleri veya işaretçilere dokunma etkinlikleri gibi haritada meydana gelen 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 denetleyicide uygularsınız. Aşağıda bununla ilgili bir örnek verilmiştir:
Swift
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
GMSMapView
oluşturulduğunda, kendisine atanmış yetkiliyi 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
düğmesini kullanarak, haritayı oluşturmak için kullanılan kamera
konumunda yapılan 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
bunun programatik bir değişikliğin parçası olduğunu gösterir. Örneğin,animateToCameraPosition:
gibi yöntemler aracılığıyla ya da doğrudan haritanın katmanının güncellenmesiyle. Bu, kullanıcı kamerayı değiştiren animasyonlar oluşturan Konumum veya pusula düğmelerine dokunduysa daNO
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 ve bir hareket, örneğin mevcut animasyonu iptal eder ve ikinci kezmapView:willMove:
çağrısı yapar.mapView:didChangeCameraPosition:
, bir hareket veya animasyon sırasında tekrar tekrar, her zamanmapView:willMove:
çağrısından sonra çağrılır. Orta kamera konumuna geçir.Son olarak,
GMSMapView
üzerindeki kamera konumu boşta kaldığındamapView:idleAtCameraPosition:
çağrılır ve ilgili kamera konumunu belirtir. Bu noktada, tüm animasyonlar ve hareketler durduruldu.Uygulamalar bu etkinliği, her kamera değişikliğinde içeriği yeniden yüklemek yerine,
GMSMapView
üzerinde görüntülenen işaretçilerin veya diğer içeriklerin yenilenmesini tetiklemek için kullanabilir.
Örneğin, bir uygulama hareket halindeyken GMSMapView
öğesini silebilir ve ardından kameranın kaldığı konumun coğrafi kodunu tersine çevirebilir.
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 yerlerdeki etkinlikler
Varsayılan olarak, önemli yerler (ÖY'ler) temel haritada ilgili simgeleriyle birlikte görünür. Önemli yerler arasında parklar, okullar, devlet binaları ve diğer önemli yerlerin yanı sıra mağazalar, restoranlar ve oteller gibi önemli iş yerleri bulunur.
ÖY'deki tıklama etkinliklerine yanıt verebilirsiniz. İşletmeler ve diğer önemli yerler rehberine bakın.
Diğer etkinlikler
GMSMapViewDelegate
sitesindeki yöntemlerin tam listesini öğrenmek için
referans kılavuzuna bakın.