تتيح لك نافذة المعلومات عرض المعلومات للمستخدم عند النقر على محدد الموقع.
يتم رسم نافذة المعلومات باتجاه شاشة الجهاز، في منتصفها فوق العلامة المرتبطة بها. تحتوي نافذة المعلومات الافتراضية على العنوان بالخط الغامق، مع نص المقتطف أسفل العنوان.
يتم تحديد محتوى نافذة المعلومات من خلال السمتَين 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 المقدمة من "SDK للخرائط" لنظام التشغيل iOS نماذج لنوافذ المعلومات المخصصة. على سبيل المثال، اطّلع على تعريف MarkerInfoWindowViewController.m (Objective-C) أو MarkerInfoWindowViewController.swift (Swift).
يمكنك مراجعة عيّنات التعليمات البرمجية للحصول على معلومات حول تنزيل هذه النماذج وتشغيلها.