رویداد

پلتفرم را انتخاب کنید: Android iOS JavaScript

با استفاده از Maps SDK برای iOS، می‌توانید به رویدادهایی که روی نقشه رخ می‌دهند گوش دهید، مانند رویدادهای تغییر دوربین یا رویدادهای ضربه زدن نشانگر.

مقدمه

برای گوش دادن به رویدادها، باید پروتکل GMSMapViewDelegate را پیاده سازی کنید. به طور معمول، شما این پروتکل را بر روی view controller که نقشه را نمایش می دهد پیاده سازی می کنید. در زیر یک مثال آورده شده است:

سویفت

import GoogleMaps

class Events: UIViewController, GMSMapViewDelegate {
  // ...
}
      

هدف-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

وقتی GMSMapView ایجاد شد، می‌توانید نماینده آن را روی کنترل‌کننده view خود تنظیم کنید. GMSMapViewDelegate فقط روش های اختیاری را ارائه می دهد. برای گوش دادن به هر رویداد خاص، باید روش مربوطه را پیاده سازی کنید.

سویفت

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)")
}
      

هدف-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);
}
      

موقعیت دوربین

با استفاده از GMSMapViewDelegate ، می‌توانید به تغییرات موقعیت دوربین مورد استفاده برای ارائه نقشه گوش دهید. سه رویداد متمایز وجود دارد.

  • mapView:willMove: نشان می دهد که موقعیت دوربین در شرف تغییر است. اگر آرگومان gesture روی YES تنظیم شده باشد، این به دلیل انجام یک حرکت طبیعی در GMSMapView توسط کاربر است، مانند حرکت حرکتی یا شیب. در غیر این صورت، NO نشان می دهد که این بخشی از یک تغییر برنامه ای است - برای مثال، از طریق روش هایی مانند animateToCameraPosition: یا به روز رسانی مستقیم لایه نقشه. اگر کاربر روی دکمه‌های موقعیت مکانی من یا قطب‌نما ضربه زده باشد، این ممکن است NO باشد، که انیمیشن‌هایی تولید می‌کنند که دوربین را تغییر می‌دهند.

    این روش ممکن است چندین بار قبل از فراخوانی mapView:idleAtCameraPosition: فراخوانی شود، اگرچه این معمولاً فقط در صورتی اتفاق می‌افتد که انیمیشن‌ها و ژست‌ها همزمان اتفاق بیفتند - برای مثال یک حرکت هر انیمیشن فعلی را لغو می‌کند و mapView:willMove: یک ثانیه را فراخوانی می‌کند. زمان

  • mapView:didChangeCameraPosition: به طور مکرر در طول یک حرکت یا انیمیشن، همیشه پس از تماس با mapView:willMove: فراخوانی می شود. از موقعیت دوربین میانی عبور می کند.

  • در نهایت، mapView:idleAtCameraPosition: هنگامی که موقعیت دوربین در GMSMapView غیرفعال شود، فراخوانی می شود و موقعیت دوربین مربوطه را مشخص می کند. در این مرحله، تمام انیمیشن ها و ژست ها متوقف شده اند.

    برنامه‌ها می‌توانند از این رویداد برای راه‌اندازی به‌روزرسانی نشانگرها یا محتوای دیگری که در GMSMapView نمایش داده می‌شوند، به‌جای بارگیری مجدد محتوا در هر تغییر دوربین استفاده کنند.

به عنوان مثال، یک برنامه کاربردی می تواند GMSMapView را در حال حرکت پاک کند و سپس موقعیتی را که دوربین روی آن قرار می گیرد معکوس کند.

سویفت

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
      }
    }
  }
      

هدف-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];
}
      

رویدادهای مربوط به مشاغل و سایر نقاط مورد علاقه

به طور پیش فرض، نقاط مورد علاقه (POI) به همراه نمادهای مربوطه روی نقشه پایه ظاهر می شوند. POI ها شامل پارک ها، مدارس، ساختمان های دولتی و موارد دیگر و همچنین POI های تجاری مانند فروشگاه ها، رستوران ها و هتل ها می شود.

می توانید به رویدادهای کلیک در یک POI پاسخ دهید. راهنمای کسب و کارها و سایر نقاط مورد علاقه را ببینید.

رویدادهای دیگر

برای آشنایی با فهرست کامل روش ها در GMSMapViewDelegate ، به راهنمای مرجع مراجعه کنید.