تشير العلامات إلى مواقع فردية على الخريطة.
وفقًا للإعدادات التلقائية، تستخدم العلامات رمزًا عاديًا يتميّز بمظهر وأسلوب "خرائط Google" الشائعين. إذا كنت تريد تخصيص علامة محدّد الموقع، يمكنك تغيير لون العلامة التلقائية، أو استبدال صورة العلامة برمز مخصّص، أو تغيير خصائص العلامة الأخرى.
استجابةً لحدث نقرة على محدِّد، يمكنك فتح نافذة معلومات. تعرض نافذة المعلومات نصًا أو صورًا في نافذة منبثقة فوق العلامة. يمكنك استخدام نافذة معلومات تلقائية لعرض النص أو إنشاء نافذة معلومات مخصصة للتحكم في محتواه بالكامل.
إضافة علامة
لإضافة علامة، يمكنك إنشاء عنصر GMSMarker
يتضمن position
و
title
، وضبط map
له.
يوضّح المثال التالي كيفية إضافة علامة إلى عنصر GMSMapView
الحالي. يتم إنشاء العلامة بالإحداثيات 10,10
، وتعرض السلسلة "مرحبًا بالعالم" في نافذة معلومات عند النقر عليها.
Swift
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.title = "Hello World" marker.map = mapView
Objective-C
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.title = @"Hello World"; marker.map = mapView;
يمكنك إضافة إمكانية إضافة علامات جديدة إلى الخريطة من خلال ضبط السمة marker.appearAnimation
على:
kGMSMarkerAnimationPop
لتشغيل علامة محدِّدة منgroundAnchor
عند إضافتها.kGMSMarkerAnimationFadeIn
للتسبب في تلاشي العلامة عند إضافتها.
إزالة علامة
يمكنك إزالة محدِّد موقع من الخريطة عن طريق ضبط سمة map
للسمة
GMSMarker
على nil
. يمكنك بدلاً من ذلك إزالة جميع العناصر المركّبة
(بما في ذلك العلامات) الحالية على الخريطة عن طريق استدعاء طريقة GMSMapView
clear
.
Swift
let camera = GMSCameraPosition.camera( withLatitude: -33.8683, longitude: 151.2086, zoom: 6 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) // ... mapView.clear()
Objective-C
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // ... [mapView clear];
إذا كنت تريد إجراء تعديلات على محدّد بعد إضافته إلى الخريطة،
احرص على الاحتفاظ بعنصر GMSMarker
. يمكنك تعديل محدّد الموقع لاحقًا عن طريق إجراء تغييرات على هذا الكائن.
Swift
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.map = mapView // ... marker.map = nil
Objective-C
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.map = mapView; // ... marker.map = nil;
تغيير لون محدّد الموقع
يمكنك تخصيص لون صورة أداة التحديد التلقائية من خلال طلب نسخة ملوّنة من الرمز التلقائي باستخدام markerImageWithColor:
، وتمرير الصورة الناتجة إلى خاصية رمز GMSMarker
.
Swift
marker.icon = GMSMarker.markerImage(with: .black)
Objective-C
marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]];
تخصيص صورة علامة
إذا كنت تريد تغيير صورة العلامة التلقائية، يمكنك ضبط رمز مخصّص باستخدام السمة icon
أو iconView
للعلامة.
في حال ضبط السمة iconView
، تتجاهل واجهة برمجة التطبيقات السمة icon
. لا يتم التعرّف على تحديثات
icon
الحالية طالما تم ضبط iconView
.
استخدام سمة "رمز" العلامة
ينشئ المقتطف التالي محدّدًا برمز مخصّص يتم تقديمه على أنّه UIImage
في السمة icon
. يقع هذا الرمز في مدينة لندن بإنجلترا. يفترض المقتطف أن التطبيق يحتوي على صورة باسم "house.png".
Swift
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let london = GMSMarker(position: positionLondon) london.title = "London" london.icon = UIImage(named: "house") london.map = mapView
Objective-C
CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *london = [GMSMarker markerWithPosition:positionLondon]; london.title = @"London"; london.icon = [UIImage imageNamed:@"house"]; london.map = mapView;
إذا كنت بصدد إنشاء عدة علامات باستخدام الصورة نفسها، استخدِم المثيل نفسه في UIImage
لكل علامة. ويساعد ذلك في تحسين أداء تطبيقك عند عرض العديد من العلامات.
قد تحتوي هذه الصورة على عدة إطارات. بالإضافة إلى ذلك، يتم الالتزام بالسمة alignmentRectInsets
، وهو أمر مفيد إذا كانت العلامة تشتمل على ظل أو منطقة أخرى غير قابلة للاستخدام.
استخدام السمة "iconView" للعلامة
يعمل المقتطف التالي على إنشاء محدِّد برمز مخصَّص من خلال ضبط
سمة iconView
الخاصة بأداة التحديد، مع إجراء تغيير في لون العلامة.
يفترض المقتطف أن تطبيقك يحتوي على صورة باسم "house.png".
Swift
import CoreLocation import GoogleMaps class MarkerViewController: UIViewController, GMSMapViewDelegate { var mapView: GMSMapView! var london: GMSMarker? var londonView: UIImageView? override func viewDidLoad() { super.viewDidLoad() let camera = GMSCameraPosition.camera( withLatitude: 51.5, longitude: -0.127, zoom: 14 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) view = mapView mapView.delegate = self let house = UIImage(named: "House")!.withRenderingMode(.alwaysTemplate) let markerView = UIImageView(image: house) markerView.tintColor = .red londonView = markerView let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let marker = GMSMarker(position: position) marker.title = "London" marker.iconView = markerView marker.tracksViewChanges = true marker.map = mapView london = marker } func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { UIView.animate(withDuration: 5.0, animations: { () -> Void in self.londonView?.tintColor = .blue }, completion: {(finished) in // Stop tracking view changes to allow CPU to idle. self.london?.tracksViewChanges = false }) } }
Objective-C
@import CoreLocation; @import GoogleMaps; @interface MarkerViewController : UIViewController <GMSMapViewDelegate> @property (strong, nonatomic) GMSMapView *mapView; @end @implementation MarkerViewController { GMSMarker *_london; UIImageView *_londonView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:51.5 longitude:-0.127 zoom:14]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; self.view = _mapView; _mapView.delegate = self; UIImage *house = [UIImage imageNamed:@"House"]; house = [house imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; _londonView = [[UIImageView alloc] initWithImage:house]; _londonView.tintColor = [UIColor redColor]; CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127); _london = [GMSMarker markerWithPosition:position]; _london.title = @"London"; _london.iconView = _londonView; _london.tracksViewChanges = YES; _london.map = self.mapView; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position { [UIView animateWithDuration:5.0 animations:^{ self->_londonView.tintColor = [UIColor blueColor]; } completion:^(BOOL finished) { // Stop tracking view changes to allow CPU to idle. self->_london.tracksViewChanges = NO; }]; } @end
وبما أنّ iconView
يقبل السمة UIView
، يمكنك الحصول على عرض هرمي لعناصر التحكّم العادية في واجهة المستخدم التي تحدِّد علاماتك، وكل طريقة عرض تتضمّن المجموعة العادية من إمكانات الصور المتحركة. يمكنك تضمين التغييرات في حجم العلامة ولونها ومستويات الإصدار الأولي، فضلاً عن تطبيق الإحالات الناجحة العشوائية. تتوافق السمة iconView
مع الرسوم المتحركة لجميع سمات UIView
المتحركة باستثناء frame
وcenter
.
يُرجى مراعاة الاعتبارات التالية عند استخدام iconView
:
- يمكن أن يطلب
UIView
الحصول على موارد عند ضبطtracksViewChanges
علىYES
، ما قد يؤدي إلى زيادة استخدام البطارية. في المقابل، الإطارUIImage
الواحد ثابت ولا يحتاج إلى إعادة عرضه. - قد تواجه بعض الأجهزة صعوبة في عرض الخريطة إذا كان لديك العديد من العلامات على الشاشة، وتحتوي كل علامة على
UIView
خاصة بها، وكانت جميع العلامات تتتبّع التغييرات في الوقت نفسه. - لا يستجيب
iconView
لتفاعل المستخدم، لأنه نبذة عن العرض. - يتصرف العرض كما لو تم ضبط
clipsToBounds
علىYES
، بغض النظر عن قيمته الفعلية. يمكنك تطبيق التحويلات التي تعمل خارج الحدود، ولكن يجب أن يكون العنصر الذي ترسمه داخل حدود العنصر. تتم مراقبة جميع الإحالات الناجحة/التغييرات وتطبيقها. باختصار: يجب أن تكون المشاهدات الفرعية ضمن العرض.
لتحديد وقت إعداد سمة tracksViewChanges
، يجب
أن تأخذ في الاعتبار اعتبارات الأداء مقابل المزايا التي
تُعيد رسم محدّد الموقع تلقائيًا. على سبيل المثال:
- إذا أردت إجراء سلسلة من التغييرات، يمكنك تغيير الموقع إلى
YES
ثم العودة إلىNO
. - عندما تكون هناك صورة متحركة قيد التشغيل أو يتم تحميل المحتوى بشكل غير متزامن،
يجب إبقاء الخاصية مضبوطة على
YES
إلى أن تكتمل الإجراءات.
تغيير تعتيم العلامة
يمكنك التحكم في درجة تعتيم محدّد باستخدام خاصية opacity
. عليك تحديد
التعتيم على أن يكون عائمًا بين 0.0 و1.0، حيث يكون الرقم 0 شفافًا بشكل كامل
ويشير إلى الرقم 1 بشكل مبهم تمامًا.
Swift
marker.opacity = 0.6
Objective-C
marker.opacity = 0.6;
يمكنك تحريك تعتيم العلامة باستخدام الصور المتحركة الأساسية من خلال GMSMarkerLayer
.
تسطير علامة
يتم عادةً رسم رموز العلامات على شاشة الجهاز بدلاً من سطح الخريطة، لذلك لا يؤدي تدوير الخريطة أو إمالةها أو تصغيرها بالضرورة إلى تغيير اتجاه العلامة.
يمكنك ضبط اتجاه محدّد موقع ليكون مسطّحًا على الأرض. يتم تدوير العلامات المحدّدة عند تدوير الخريطة وتغيير المنظور عند إمالة الخريطة. كما هو الحال مع العلامات العادية، تحتفظ العلامات المسطحة بحجمها عند تكبير الخريطة أو تصغيرها.
لتغيير اتجاه العلامة، اضبط سمة flat
للعلامة على
YES
أو true
.
Swift
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let londonMarker = GMSMarker(position: positionLondon) londonMarker.isFlat = true londonMarker.map = mapView
Objective-C
CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *londonMarker = [GMSMarker markerWithPosition:positionLondon]; londonMarker.flat = YES; londonMarker.map = mapView;
تدوير علامة
يمكنك تدوير علامة حول نقطة الارتساء من خلال ضبط السمة rotation
. حدِّد التدوير كنوع CLLocationDegrees
، حيث يتم قياسه بالدرجات في اتجاه عقارب الساعة من الموضع التلقائي. عندما يكون محدّد الشاشة مسطّحًا على الخريطة،
يكون الموضع التلقائي هو الشمال.
في المثال التالي، يتم تدوير العلامة بمقدار 90 درجة. يؤدي ضبط سمة groundAnchor
على القيمة 0.5,0.5
إلى تدوير العلامة حول الوسط بدلاً من قاعدتها.
Swift
let degrees = 90.0 londonMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5) londonMarker.rotation = degrees londonMarker.map = mapView
Objective-C
CLLocationDegrees degrees = 90; londonMarker.groundAnchor = CGPointMake(0.5, 0.5); londonMarker.rotation = degrees; londonMarker.map = mapView;
التعامل مع الأحداث على العلامات
يمكنك الاستماع إلى الأحداث التي تُعرض على الخريطة، مثلاً عندما ينقر المستخدم على محدِّد موقع. للاستماع إلى الأحداث، عليك تنفيذ بروتوكول
GMSMapViewDelegate
. اطّلِع على
دليل الفعاليات وقائمة الطُرق على
GMSMapViewDelegate
. بالنسبة إلى أحداث "التجوّل الافتراضي"، يمكنك الاطّلاع على GMSPanoramaViewDelegate
.