iOS için Haritalar SDK'sını kullanarak haritada gerçekleşen 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österen 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 options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) 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]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; 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 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.gesturebağımsız değişkeniYESolarak ayarlanmışsa bu, kullanıcınınGMSMapViewüzerinde kaydırma veya eğme gibi doğal bir hareket gerçekleştirmesinden kaynaklanır. Aksi takdirdeNO, bunun programatik bir değişikliğin parçası olduğunu gösterir. Örneğin,animateToCameraPosition:gibi yöntemler veya haritanın katmanını doğrudan güncelleme. Kullanıcı, kamerayı değiştiren animasyonlar oluşturan Konumum veya pusula düğmelerine dokunmuşsa bu değerNOde 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 ortaya çıkar. Örneğin, bir hareket mevcut animasyonları iptal eder vemapView:willMove:yöntemini ikinci kez çağırır.mapView:didChangeCameraPosition:, bir hareket veya animasyon sırasında her zamanmapView:willMove:çağrısından sonra tekrar tekrar çağrılır. Ara kamera konumunu geçti.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 durdurulur.Uygulamalar, her kamera değişikliğinde içeriği yeniden yüklemek yerine bu etkinliği kullanarak
GMSMapViewüzerinde gösterilen işaretçilerin veya diğer içeriklerin yenilenmesini tetikleyebilir.
Örneğin, bir uygulama hareket sırasında GMSMapView öğesini temizleyebilir ve ardından kameranın durduğu konumu tersine 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
static 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, önemli yerler (ÖY) ilgili simgeleriyle birlikte temel haritada görünür. ÖY'ler arasında parklar, okullar, devlet binaları ve daha fazlasının yanı sıra mağazalar, restoranlar ve oteller gibi önemli işletme mekanları yer alır.
ÖY'deki tıklama etkinliklerine yanıt verebilirsiniz. İşletmeler ve diğer önemli yerler ile ilgili kılavuza bakın.
Diğer etkinlikler
GMSMapViewDelegate ile ilgili yöntemlerin tam listesini öğrenmek için referans kılavuzuna bakın.