
חלון מידע מאפשר להציג מידע למשתמש כשהוא מקיש על סמן.
חלון מידע מוצג בכיוון של מסך המכשיר, במרכז מעל הסמן המשויך אליו. חלון המידע שמוגדר כברירת מחדל מכיל את הכותרת המודגשת, ומתחתיה את הטקסט של קטע הקוד.
התוכן של חלון המידע מוגדר על ידי המאפיינים 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:. ה-event listener הזה נקרא כשסמן עומד להיבחר, ומאפשר לכם להחזיר מופע של המחלקה המותאמת אישית UIView כדי להגדיר את חלון המידע המותאם אישית שבו הסמן משתמש.
בתמונות הבאות מוצגים חלון מידע שמוגדר כברירת מחדל, חלון מידע עם תוכן מותאם אישית וחלון מידע עם מסגרת ורקע מותאמים אישית.
דוגמאות הקוד ב-GitHub שסופקו עם SDK של מפות ל-iOS כוללות דוגמאות של חלונות מידע בהתאמה אישית. לדוגמה, ראו את ההגדרה של MarkerInfoWindowViewController.m (Objective-C) או של MarkerInfoWindowViewController.swift (Swift).
בדוגמאות הקוד מוסבר איך להוריד ולהריץ את הדוגמאות האלה.