באמצעות ה-SDK של מפות Google ל-iOS, תוכלו להאזין לאירועים שמתרחשים מפה, כגון אירועי החלפת מצלמה או אירועים של הקשה על סמנים.
מבוא
כדי להאזין לאירועים, עליכם להטמיע את
GMSMapViewDelegate
. בדרך כלל, אפשר להטמיע
בפרוטוקול הזה בבקר התצוגה שמציג את המפה. לדוגמה:
Swift
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
אחרי יצירת GMSMapView
, אפשר לתת לו גישה לתצוגה המפורטת שלך
גרפי. השדה GMSMapViewDelegate
מספק רק שיטות אופציונליות. להאזין
בכל אירוע מסוים, יש להטמיע את השיטה הרלוונטית.
Swift
override func loadView() { super.loadView() let camera = GMSCameraPosition.camera( withLatitude: 1.285, longitude: 103.848, zoom: 12 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } // MARK: GMSMapViewDelegate func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { print("You tapped at \(coordinate.latitude), \(coordinate.longitude)") }
Objective-C
- (void)loadView { [super loadView]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285 longitude:103.848 zoom:12]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate { NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude); }
מיקום המצלמה
באמצעות GMSMapViewDelegate
, אפשר להאזין לשינויים במיקום המצלמה
ששימשו לעיבוד המפה. יש שלושה אירועים שונים.
mapView:willMove:
מציין שמיקום המצלמה עומד להשתנות. אם הארגומנטgesture
מוגדר ל-YES
, הסיבה לכך היא שמשתמש מבצע תנועה טבעית בGMSMapView
, כמו הזזה או הטיה. אחרת,NO
מציין שזה חלק משינוי פרוגרמטי - לדוגמה, באמצעות methods כמוanimateToCameraPosition:
או עדכון את שכבת המפה ישירות. הערך יכול להיות גםNO
אם משתמש הקיש על לחצני מיקום או מצפן, שיוצרים אנימציות שמשנות מצלמה.ניתן לקרוא לשיטה הזו מספר פעמים לפני
mapView:idleAtCameraPosition:
מופעל, על אף שבדרך כלל מתרחשת רק אם האנימציות והתנועות מתבצעות בו-זמנית - תנועה תבטל את כל האנימציה הנוכחית, למשל, והיא תקראmapView:willMove:
פעם שנייה.mapView:didChangeCameraPosition:
נקרא שוב ושוב במהלך תנועה או אנימציה, תמיד אחרי קריאה ל-mapView:willMove:
. היא עברה את בנקודת הביניים של המצלמה.לבסוף,
mapView:idleAtCameraPosition:
מופעל ברגע שמיקום המצלמה ב-GMSMapView
הופך ללא פעיל ומציין את מיקום המצלמה הרלוונטי. בנקודה הזו, כל האנימציות והתנועות הופסקו.אפליקציות יכולות להשתמש באירוע הזה כדי להפעיל רענון של סמנים או שמוצג ב-
GMSMapView
, במקום, למשל, טעינה מחדש של התוכן בכל החלפת מצלמה.
לדוגמה, אפליקציה יכולה למחוק את GMSMapView
בזמן ההעברה, ואז
הפיכת המיקום הגאוגרפי למיקום שבו המצלמה מניחה.
Swift
let geocoder = GMSGeocoder() func mapView(_ mapView: GMSMapView, willMove gesture: Bool) { mapView.clear() } func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) { geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in guard error == nil else { return } if let result = response?.firstResult() { let marker = GMSMarker() marker.position = cameraPosition.target marker.title = result.lines?[0] marker.snippet = result.lines?[1] marker.map = mapView } } }
Objective-C
GMSGeocoder *geocoder; - (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture { [mapView clear]; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition { id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) { if (error != nil) { return; } GMSReverseGeocodeResult *result = response.firstResult; GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target]; marker.title = result.lines[0]; marker.snippet = result.lines[1]; marker.map = mapView; }; [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler]; }
אירועים לגבי עסקים ונקודות עניין אחרות
כברירת מחדל, נקודות עניין (POI) מופיעות במפה הבסיסית יחד עם הסמלים המתאימים שלהן. נקודות עניין כוללות פארקים, בתי ספר, בנייני ממשלה ועוד, וגם נקודות עניין של עסקים כמו חנויות, מסעדות ומלונות.
אפשר להגיב לאירועים מסוג קליק על נקודת עניין. אפשר לעיין במדריך לגבי עסקים ונקודות עניין אחרות.
אירועים אחרים
במדריך העזרה מפורטת הרשימה המלאה של השיטות ב-GMSMapViewDelegate
.