باستخدام حزمة تطوير البرامج (SDK) لتطبيق "خرائط 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
، اطّلِع على
الدليل المرجعي.