تتيح لك نافذة المعلومات عرض معلومات للمستخدم عند النقر على أحد العلامات.
يتم رسم نافذة معلومات على شاشة الجهاز، في منتصف الشاشة فوق العلامة المرتبطة بها. تحتوي نافذة المعلومات التلقائية على العنوان بخط عريض، مع نص المقتطف تحت العنوان.
يتم تحديد محتوى نافذة المعلومات من خلال السمتَين 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
قيمة فارغة.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).
اطّلِع على عيّنات الرموز البرمجية للحصول على معلومات عن تنزيل هذه العيّنات وتشغيلها.