الأحداث

اختيار النظام الأساسي: نظام التشغيل Android iOS JavaScript

وباستخدام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل iOS، يمكنك الاستماع إلى الأحداث التي تقع على مثل أحداث تغيير الكاميرا أو أحداث النقر على محدّد الموقع.

مقدمة

للاستماع إلى الأحداث، يجب تنفيذ GMSMapViewDelegate. عادةً، تقوم بتنفيذ هذا البروتوكول في وحدة التحكم في العرض التي تعرض الخريطة. فيما يلي مثال:

Swift

import GoogleMaps

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

Objective-C

@import GoogleMaps;

@interface Events : UIViewController <GMSMapViewDelegate>

@end
      

عند إنشاء GMSMapView، يمكنك ضبط التفويض بطريقة العرض. المستخدم. توفّر GMSMapViewDelegate طرقًا اختيارية فقط. للاستماع لأي حدث معين، فيجب تنفيذ الطريقة ذات الصلة.

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

موضع الكاميرا

باستخدام GMSMapViewDelegate، يمكنك الاستماع إلى التغييرات في موضع الكاميرا. التي تستخدم لعرض الخريطة. هناك ثلاثة أحداث مختلفة.

  • يشير الرمز mapView:willMove: إلى أنّه سيتم تغيير موضع الكاميرا. إذا تم ضبط الوسيطة gesture على YES، يرجع ذلك إلى إجراء مستخدم إيماءة طبيعية على GMSMapView، مثل التحريك أو الإمالة. في الحالات الأخرى، ستشير السمة NO إلى أنّ هذا الإجراء جزء من تغيير آلي. على سبيل المثال، من خلال طرق مثل animateToCameraPosition: أو تحديث طبقة الخريطة مباشرة. وقد يكون أيضًا NO إذا نقر مستخدم على أزرار الموقع أو البوصلة، التي تنشئ صورًا متحركة تغير والكاميرا.

    قد يتم استدعاء هذه الطريقة عدة مرات قبل تم استدعاء mapView:idleAtCameraPosition:، على الرغم من أن هذا عادةً ما لا يحدث إلا إذا حدثت الرسوم المتحركة والإيماءات في نفس الوقت - إيماءة مثلاً، سيلغي أي رسم متحرك حالي، وسيستدعي mapView:willMove: مرة ثانية.

  • يتم استدعاء mapView:didChangeCameraPosition: بشكل متكرر أثناء إيماءة أو صورة متحركة، تظهر دائمًا بعد الاتصال بـ mapView:willMove:. يتم تجاوز موضع الكاميرا الوسيط.

  • وأخيرًا، يتم استدعاء mapView:idleAtCameraPosition: بعد تحديد موضع الكاميرا. تصبح على GMSMapView في وضع عدم النشاط، وتحدد موضع الكاميرا المناسب. في هذه المرحلة، توقفت جميع الرسوم المتحركة والإيماءات.

    يمكن للتطبيقات استخدام هذا الحدث لبدء عملية تحديث العلامات أو غير ذلك المحتوى المعروض على GMSMapView بدلاً من عرضه مثلاً أو إعادة تحميل المحتوى عند كل تغيير في الكاميرا.

على سبيل المثال، يمكن لأحد التطبيقات محو GMSMapView أثناء التنقل، ثم الترميز الجغرافي العكسي للموضع الذي تستقر فيه الكاميرا

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

فعاليات حول الأنشطة التجارية ونقاط الاهتمام الأخرى

بشكل افتراضي، تظهر نقاط الاهتمام على الخريطة الأساسية مع الرموز المقابلة لها. تشمل نقاط الاهتمام المتنزهات والمدارس والمباني الحكومية وغير ذلك، بالإضافة إلى نقاط الاهتمام التجارية، مثل المتاجر والمطاعم والفنادق.

يمكنك الرد على الأحداث الناتجة عن النقر على نقطة اهتمام. اطّلِع على دليل الأنشطة التجارية ونقاط الاهتمام الأخرى.

الأحداث الأخرى

للتعرّف على القائمة الكاملة للطرق على GMSMapViewDelegate، يمكنك الاطّلاع على الدليل المرجعي