وباستخدام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط 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
، يمكنك الاطّلاع على
الدليل المرجعي