Etkinlikler

Platform seçin: Android iOS JavaScript

iOS için Haritalar SDK'sını kullanarak haritada 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 kontrolöründe 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üntüleme 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 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şkeni YES olarak ayarlanmışsa bunun nedeni kullanıcının GMSMapView ü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 (ör. 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 dokunduysa da bu durum 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 mapView:willMove:'ı ikinci kez çağırır.

  • mapView:didChangeCameraPosition:, bir hareket veya animasyon sırasında her zaman mapView: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ğunda mapView: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çeriklerin 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];
}
      

İşletmeler ve diğer önemli yerlerdeki etkinlikler

İlgi çekici yerler (ÖY), varsayılan olarak ana haritada ilgili simgeleriyle birlikte görünür. ÖY'ler arasında parklar, okullar, resmi binalar ve mağazalar, restoranlar, oteller gibi işletme ÖY'leri yer alır.

Önemli bir yerdeki 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.