Etkinlikler

Platform seçin: Android iOS JavaScript

iOS için Haritalar SDK'sını kullanarak harita üzerinde gerçekleşen kamera değiştirme etkinlikleri veya işaretçiye dokunma etkinlikleri gibi etkinlikleri dinleyebilirsiniz.

Giriş

Etkinlikleri dinlemek için GMSMapViewDelegate protokolü. Bu protokolü genellikle haritayı görüntüleyen görünüm denetleyicisine 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, yetki verilmiş kullanıcı adını görünümünüz olarak ayarlayabilirsiniz denetleyici. GMSMapViewDelegate yalnızca isteğe bağlı yöntemler sağlar. Dinlemek için 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 cihazını kullanarak kamera konumundaki değişiklikleri dinleyebilirsiniz kullanılır. Üç 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 bir kullanıcının GMSMapView üzerinde kaydırma veya yatırma gibi doğal bir hareket. Aksi takdirde, NO bunun programatik bir değişikliğin parçası olduğunu belirtir. örneğin animateToCameraPosition: gibi yöntemlerle veya harita katmanını ekleyebilirsiniz. Bu, kullanıcı öğelerim bölümüne dokunduysa NO Konum veya pusula düğmeleri gibi, bulun.

    Bu yöntem, daha önce birden fazla kez çağrılabilir mapView:idleAtCameraPosition: çağrılır, ancak bu genellikle yalnızca animasyonlar ve hareketler aynı anda gerçekleşirse (bir hareket varsa, mevcut animasyonu iptal eder ve İkinci kez mapView:willMove:.

  • mapView:didChangeCameraPosition:, bir hareket veya animasyon sırasında her zaman mapView:willMove: çağrıldıktan sonra tekrar tekrar çağrılır. Geçen yıl orta kamera konumuna gidin.

  • Son olarak mapView:idleAtCameraPosition:, kamera pozisyonundan sonra çağrılır on GMSMapView boşta kalır ve ilgili kamera konumunu belirtir. Bu noktada, tüm animasyonlar ve hareketler durduruldu.

    Uygulamalar, işaretçilerin veya diğer verilerin yenilenmesini tetiklemek için bu etkinliği kullanabilir. GMSMapView adresinde gösterilen içerik her kamera değişikliğinde içeriği yeniden yüklemeyi deneyebilirsiniz.

Ö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

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. Bu kılavuza göz atın: işletmelerin ve diğer önemli yerlerin yanı sıra

Diğer etkinlikler

GMSMapViewDelegate sitesindeki yöntemlerin tam listesi hakkında bilgi edinmek için bkz. referans kılavuzunu inceleyin.