启用“我的位置”按钮

“启用‘我的位置’按钮”的图片。

我的位置按钮会显示在地图视图的右下角。当用户点按此按钮时,地图会平移到用户的当前位置。

开始使用

您必须先配置开发环境,然后才能试用该示例代码。如需了解详情,请参阅 Maps SDK for 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       

在本地运行完整示例应用

Maps SDK for iOS 示例应用可从 GitHub 下载为下载归档文件。按照以下步骤安装并试用 Maps SDK for iOS 示例应用。

  1. 运行 git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git,将示例代码库克隆到本地目录中。
  2. 打开终端窗口,导航到克隆示例文件的目录,然后深入到 GoogleMaps 目录:

    Swift

    cd maps-sdk-for-ios-samples/GoogleMaps-Swift open GoogleMapsSwiftXCFrameworkDemos.xcodeproj

    Objective-C

    cd maps-sdk-for-ios-samples-main/GoogleMaps open GoogleMapsDemos.xcodeproj
  3. 在 Xcode 项目中,依次前往 File > Add Package Dependencies。 输入 https://github.com/googlemaps/ios-maps-sdk 作为网址,按 Enter 键拉取软件包,然后点击 Add Package
  4. 在 Xcode 中,按编译按钮以使用当前方案构建应用。构建会产生错误,提示您在 SDKConstants.swift 文件(适用于 Swift)或 SDKDemoAPIKey.h 文件(适用于 Objective-C)中输入 API 密钥。
  5. 已启用 Maps SDK for iOS 的项目中获取 API 密钥
  6. 修改 Swift 的 SDKConstants.swift 文件或 Objective-C 的 SDKDemoAPIKey.h 文件,然后将您的 API 密钥粘贴到 apiKeykAPIKey 常量的定义中。例如:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  7. 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.
  8. 构建并运行项目。系统会显示 iOS 模拟器窗口,其中包含 Maps SDK 演示的列表。
  9. 选择显示的选项之一,以试用 Maps SDK for iOS 的某项功能。
  10. 如果系统提示您允许 GoogleMapsDemos 访问您的位置信息,请选择允许