نوافذ المعلومات

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

نافذة معلومات تظهر فوق علامة

تتيح لك نافذة المعلومات عرض معلومات للمستخدم عندما ينقر على علامة.

يتم رسم نافذة المعلومات باتجاه شاشة الجهاز، وتتوسط فوق العلامة المرتبطة بها. تحتوي نافذة المعلومات التلقائية على العنوان بخط عريض، مع نص المقتطف أسفل العنوان.

يتم تحديد محتوى نافذة المعلومات من خلال السمتَين title وsnippet في العلامة. لن يؤدي النقر على العلامة إلى عرض نافذة معلومات إذا كانت السمتان title وsnippet فارغتين أو nil.

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

أنشئ نافذة معلومات مخصّصة لإضافة نص أو صور إضافية. تمنحك نافذة المعلومات المخصّصة تحكّمًا كاملاً في مظهر النافذة المنبثقة.

إضافة نافذة معلومات

ينشئ المقتطف التالي علامة بسيطة، مع عنوان فقط لنص نافذة المعلومات.

Swift

let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: position)
london.title = "London"
london.map = mapView
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.map = mapView;
      

باستخدام السمة snippet، يمكنك إضافة نص إضافي يظهر أسفل العنوان بخط أصغر. يتم تلقائيًا التفاف السلاسل التي تكون أطول من عرض نافذة المعلومات على عدة أسطر. قد يتم اقتطاع الرسائل الطويلة جدًا.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
      

إظهار/إخفاء نافذة معلومات

تم تصميم نوافذ المعلومات للاستجابة لأحداث لمس المستخدم على العلامة. يمكنك إظهار نافذة معلومات أو إخفاؤها آليًا من خلال ضبط السمة selectedMarker لـ GMSMapView:

  • اضبط selectedMarker على اسم العلامة لعرضها.
  • اضبط السمة selectedMarker على nil لإخفائها.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
// Show marker
mapView.selectedMarker = london
// Hide marker
mapView.selectedMarker = nil
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
// Show marker
mapView.selectedMarker = london;
// Hide marker
mapView.selectedMarker = nil;
      

ضبط نافذة معلومات ليتم تحديثها تلقائيًا

اضبط tracksInfoWindowChanges على العلامة على YES أو true إذا كنت تريد عرض الخصائص الجديدة أو محتوى نافذة المعلومات فورًا عند تغييرها، بدلاً من الانتظار حتى يتم إخفاء نافذة المعلومات ثم عرضها مرة أخرى. القيمة التلقائية هي NO أو false.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

لتحديد وقت ضبط السمة tracksInfoWindowChanges، عليك الموازنة بين اعتبارات الأداء ومزايا إعادة رسم نافذة المعلومات تلقائيًا. على سبيل المثال:

  • إذا كان لديك سلسلة من التغييرات التي تريد إجراؤها، يمكنك تغيير السمة إلى YES ثم العودة إلى NO.
  • عندما تكون هناك صورة متحركة قيد التشغيل أو يتم تحميل المحتوى بشكل غير متزامن، يجب إبقاء السمة مضبوطة على YES إلى أن تكتمل الإجراءات.

يُرجى أيضًا الرجوع إلى الملاحظات التي يجب مراعاتها عند استخدام السمة iconView الخاصة بالعلامة.

تغيير موضع نافذة المعلومات

يتم رسم نافذة المعلومات باتجاه شاشة الجهاز، وتكون في المنتصف فوق العلامة المرتبطة بها. يمكنك تغيير موضع نافذة المعلومات بالنسبة إلى العلامة من خلال ضبط السمة infoWindowAnchor. تقبل هذه السمة قيمة CGPoint، ويتم تحديدها كإزاحة (x,y) حيث يتراوح كل من x وy بين 0.0 و1.0. الإزاحة التلقائية هي (0.5، 0.0)، أي في أعلى الوسط. يُعدّ ضبط إزاحة infoWindowAnchor مفيدًا لمحاذاة نافذة المعلومات مع رمز مخصّص.

Swift

london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5)
london.icon = UIImage(named: "house")
london.map = mapView
      

Objective-C

london.infoWindowAnchor = CGPointMake(0.5, 0.5);
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

التعامل مع الأحداث في نوافذ المعلومات

يمكنك الاستماع إلى أحداث نافذة المعلومات التالية:

  • mapView:markerInfoWindow: — يتم استدعاؤها عندما يكون أحد العلامات على وشك أن يتم اختياره. يمكن أن تعرض هذه الدالة اختياريًا نافذة معلومات مخصّصة، على شكل UIView، لاستخدامها مع العلامة. يمكنك الاطّلاع على نوافذ المعلومات المخصّصة أدناه للحصول على مزيد من المعلومات.

  • mapView:markerInfoContents: — يتم استدعاؤها عندما تعرض mapView:markerInfoWindow القيمة nil.

  • mapView:didCloseInfoWindowOfMarker: — يتم استدعاؤها عند إغلاق نافذة معلومات العلامة.

  • mapView:didLongPressInfoWindowOfMarker: — يتم استدعاؤها بعد الضغط مع الاستمرار على نافذة معلومات العلامة.

للاستماع إلى الأحداث، يجب تنفيذ بروتوكول GMSMapViewDelegate. يمكنك الاطّلاع على دليل الأحداث وقائمة الطرق على GMSMapViewDelegate.

يتضمّن GitHub نماذج توضّح كيفية التعامل مع أحداث نافذة المعلومات:

نوافذ المعلومات المخصّصة

يمكنك تخصيص محتوى نوافذ المعلومات من خلال إنشاء فئة فرعية من UIView تحدّد تنسيق نافذة المعلومات المخصّصة. في هذه الفئة الفرعية، يمكنك تحديد العرض كما تريد. على سبيل المثال، يمكنك استخدام مثيلات UILabel المخصّصة لعرض نص العنوان والمقتطف وطرق العرض الأخرى، مثل مثيلات UIImageView، لإضافة الصور المعروضة في نافذة المعلومات.

تأكَّد من أنّ ViewController ينفّذ بروتوكول GMSIndoorDisplayDelegate ويحدّد مستمعًا للحدث mapView:markerInfoWindow:. يتم استدعاء متتبِّع الأحداث هذا عندما يكون محدِّد الموقع على وشك أن يتم اختياره، ويتيح لك عرض مثيل لفئة UIView المخصّصة لتحديد نافذة المعلومات المخصّصة التي يستخدمها محدِّد الموقع.

تعرض الصور أدناه نافذة معلومات تلقائية، ونافذة معلومات بمحتوى مخصّص، ونافذة معلومات بإطار وخلفية مخصّصَين.

مقارنة بين نوافذ المعلومات

تتضمّن عيّنات التعليمات البرمجية على GitHub المقدَّمة مع حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" للتطبيقات المتوافقة مع iOS عيّنات من نوافذ المعلومات المخصّصة. على سبيل المثال، يمكنك الاطّلاع على تعريف MarkerInfoWindowViewController.m (Objective-C) أو MarkerInfoWindowViewController.swift (Swift).

يمكنك الاطّلاع على عيّنات التعليمات البرمجية للحصول على معلومات عن تنزيل هذه العيّنات وتشغيلها.