הלחצן המיקום שלי מוצג בפינה השמאלית התחתונה של תצוגת המפה. כשהמשתמש מקשיב על הלחצן, המפה מתמקדת במיקום הנוכחי של המשתמש.
שנתחיל?
לפני שתוכלו לנסות את הקוד לדוגמה, עליכם להגדיר את סביבת הפיתוח. מידע נוסף זמין במאמר דוגמאות קוד ל-SDK של מפות ל-iOS.
הצגת הקוד
Swift
import GoogleMaps import UIKit class MyLocationViewController: UIViewController { private let cameraLatitude: CLLocationDegrees = -33.868 private let cameraLongitude: CLLocationDegrees = 151.2086 private let cameraZoom: Float = 12 lazy var mapView: GMSMapView = { let camera = GMSCameraPosition( latitude: cameraLatitude, longitude: cameraLongitude, zoom: cameraZoom) return GMSMapView(frame: .zero, camera: camera) }() var observation: NSKeyValueObservation? var location: CLLocation? { didSet { guard oldValue == nil, let firstLocation = location else { return } mapView.camera = GMSCameraPosition(target: firstLocation.coordinate, zoom: 14) } } override func viewDidLoad() { super.viewDidLoad() mapView.delegate = self mapView.settings.compassButton = true mapView.settings.myLocationButton = true mapView.isMyLocationEnabled = true view = mapView // Listen to the myLocation property of GMSMapView. observation = mapView.observe(\.myLocation, options: [.new]) { [weak self] mapView, _ in self?.location = mapView.myLocation } } deinit { observation?.invalidate() } } extension MyLocationViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, didTapMyLocation location: CLLocationCoordinate2D) { let alert = UIAlertController( title: "Location Tapped", message: "Current location: <\(location.latitude), \(location.longitude)>", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default)) present(alert, animated: true) } }
Objective-C
#import "GoogleMapsDemos/Samples/MyLocationViewController.h" #import <GoogleMaps/GoogleMaps.h> @implementation MyLocationViewController { GMSMapView *_mapView; BOOL _firstLocationUpdate; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:12]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _mapView.delegate = self; _mapView.settings.compassButton = YES; _mapView.settings.myLocationButton = YES; // Listen to the myLocation property of GMSMapView. [_mapView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingOptionNew context:NULL]; self.view = _mapView; // Ask for My Location data after the map has already been added to the UI. GMSMapView *mapView = _mapView; dispatch_async(dispatch_get_main_queue(), ^{ mapView.myLocationEnabled = YES; }); } - (void)mapView:(GMSMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location { NSString *message = [NSString stringWithFormat:@"My Location Dot Tapped at: [lat: %f, lng: %f]", location.latitude, location.longitude]; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Location Tapped" message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ }]; [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:nil]; } - (void)dealloc { [_mapView removeObserver:self forKeyPath:@"myLocation" context:NULL]; } #pragma mark - KVO updates - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (!_firstLocationUpdate) { // If the first location update has not yet been received, then jump to that location. _firstLocationUpdate = YES; CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey]; _mapView.camera = [GMSCameraPosition cameraWithTarget:location.coordinate zoom:14]; } } @end
הפעלה מקומית של האפליקציה המלאה לדוגמה
האפליקציה לדוגמה של SDK של מפות ל-iOS זמינה כארכיון להורדה ב-GitHub. כך מתקינים את האפליקציה לדוגמה של Maps SDK ל-iOS ומנסים אותה.
- מריצים את הפקודה
git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git
כדי להעתיק את המאגר לדוגמה לספרייה מקומית. פותחים חלון טרמינל, עוברים לספרייה שבה קלונתם את קובצי הדוגמה ומבצעים התמקדות בספרייה GoogleMaps:
Swift
cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
pod install
open GoogleMapsSwiftDemos.xcworkspace
Objective-C
cd maps-sdk-for-ios-samples-main/GoogleMaps
pod install
open GoogleMapsDemos.xcworkspace
- ב-Xcode, לוחצים על לחצן ה-compile כדי ליצור את האפליקציה לפי התוכנית הנוכחית. תופיע הודעת שגיאה ב-build עם בקשה להזין את מפתח ה-API בקובץ
SDKConstants.swift
עבור Swift או בקובץSDKDemoAPIKey.h
עבור Objective-C. - אם עדיין אין לכם מפתח API, עליכם לפעול לפי ההוראות כדי להגדיר פרויקט במסוף Google Cloud ולקבל מפתח API. כשמגדירים את המפתח במסוף Cloud, אפשר להגביל את המפתח למזהה החבילה של האפליקציה לדוגמה, כדי לוודא שרק האפליקציה שלכם תוכל להשתמש במפתח. מזהה החבילה שמוגדר כברירת מחדל באפליקציית הדוגמאות של ה-SDK הוא
com.example.GoogleMapsDemos
. - עורכים את הקובץ
SDKConstants.swift
עבור Swift או את הקובץSDKDemoAPIKey.h
עבור Objective-C, ומדביקים את מפתח ה-API בהגדרה של הקבועapiKey
אוkAPIKey
. לדוגמה:Swift
static let apiKey = "YOUR_API_KEY"
Objective-C
static NSString *const kAPIKey = @"YOUR_API_KEY";
- בקובץ
SDKConstants.swift
(Swift) או בקובץSDKDemoAPIKey.h
(Objective-C), מסירים את השורה הבאה כי היא משמשת לרישום הבעיה שהוגדרה על ידי המשתמש:Swift
#error (Register for API Key and insert here. Then delete this line.)
Objective-C
#error Register for API Key and insert here.
- מריצים את הפרויקט. חלון הסימולטור של iOS מופיע עם רשימה של דמואים של SDK של מפות.
- בוחרים באחת מהאפשרויות שמוצגות כדי להתנסות בתכונה של SDK של מפות ל-iOS.
- אם מופיעה בקשה לתת ל-GoogleMapsDemos גישה למיקום שלכם, בוחרים באפשרות אישור.