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şkeniYES
olarak ayarlanırsa bunun nedeni bir kullanıcınınGMSMapView
ü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ğinanimateToCameraPosition:
gibi yöntemlerle veya harita katmanını ekleyebilirsiniz. Bu, kullanıcı öğelerim bölümüne dokunduysaNO
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 kezmapView:willMove:
.mapView:didChangeCameraPosition:
, bir hareket veya animasyon sırasında her zamanmapView: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 onGMSMapView
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.