Etkinlikler

Platform seçin: Android iOS JavaScript

iOS için Haritalar SDK'sını kullanarak haritada meydana gelen 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ö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 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 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 özelliğini 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 ayarlanırsa bunun nedeni, kullanıcının GMSMapView üzerinde kaydırma veya eğme gibi doğal bir hareket yapmasıdır. Aksi takdirde, NO bu değişikliğin programatik bir değişikliğin parçası olduğunu gösterir. Örneğin, animateToCameraPosition: gibi yöntemlerle veya haritanın katmanını doğrudan güncelleyerek. Kullanıcı, kamerayı değiştiren animasyonlar oluşturan Konumum veya pusula düğmelerine dokunduğunda da bu durum NO 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 olur. Örneğin, bir hareket mevcut animasyonları iptal eder ve mapView:willMove:'yi ikinci kez çağırır.

  • mapView:didChangeCameraPosition:, bir hareket veya animasyon sırasında tekrar tekrar çağrılır ve her zaman mapView:willMove: çağrısından sonra çağrılır. Ara kamera konumu iletilir.

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

    Uygulamalar, bu etkinliği kullanarak GMSMapView üzerinde gösterilen işaretçilerin veya diğer içeriklerin yenilenmesini tetikleyebilir. Örneğin, her kamera değişikliğinde içeriği yeniden yüklemek yerine bu etkinliği kullanabilirler.

Örneğin, bir uygulama hareket halindeyken GMSMapView öğesini temizleyebilir ve ardından kameranın durduğu konumu ters 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

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, ilgi çekici yerler (İÇY'ler) temel haritada ilgili simgeleriyle birlikte gösterilir. Önemli yerler arasında parklar, okullar, devlet binaları ve daha fazlasının yanı sıra mağazalar, restoranlar ve oteller gibi işletme ÖY'leri yer alır.

Bir ÖY'deki tıklama etkinliklerine yanıt verebilirsiniz. İşletmeler ve diğer ilgi çekici yerler hakkındaki kılavuza göz atın.

Diğer etkinlikler

GMSMapViewDelegate üzerindeki yöntemlerin tam listesi hakkında bilgi edinmek için referans kılavuzuna bakın.