Etkinlikler

Platform seçin: Android iOS JavaScript

iOS için Haritalar SDK'sını kullanarak kamera değiştirme etkinlikleri veya işaretçiye dokunma etkinlikleri gibi harita üzerinde gerçekleşen 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, erişim yetkisini görünüm denetleyicinize atayabilirsiniz. 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 yardımıyla, 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 belirtir. gesture bağımsız değişkeni YES olarak ayarlanırsa bunun nedeni, kullanıcının GMSMapView üzerinde kaydırma veya eğme gibi doğal bir hareket gerçekleştirmesidir. Aksi takdirde NO, bunun programatik bir değişikliğin parçası olduğunu gösterir (örneğin, animateToCameraPosition: gibi yöntemlerle veya harita katmanını doğrudan güncelleme yoluyla). Bu, kullanıcı Konumum veya kamerayı değiştiren animasyonlar oluşturan pusula düğmelerine dokunduğunda da NO 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 ve ikinci kez mapView:willMove: çağrısı yapar.

  • mapView:didChangeCameraPosition:, bir hareket veya animasyon sırasında her zaman mapView:willMove: çağrısından sonra tekrar tekrar çağrılır. Orta kamera konumunu geçirdi.

  • Son olarak, GMSMapView üzerindeki kamera konumu boşta kaldığında mapView:idleAtCameraPosition: çağrılır ve ilgili kamera konumunu belirtir. Bu noktada tüm animasyonlar ve hareketler durduruldu.

    Uygulamalar, örneğin 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 bu etkinliği kullanabilir.

Örneğin, bir uygulama hareket halindeyken GMSMapView öğesini temizleyebilir, ardından kameranın üzerinde durduğu 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];
}
      

İşletme 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 daha pek çok şeyin yanı sıra mağazalar, restoranlar ve oteller gibi iş amaçlı ÖY'ler yer alır.

Bir ÖY'deki tıklama etkinliklerine yanıt verebilirsiniz. İşletmeler ve diğer önemli yerler ile ilgili kılavuzu inceleyin.

Diğer etkinlikler

GMSMapViewDelegate makalesindeki yöntemlerin tam listesi için referans kılavuzuna bakın.