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