启用“我的位置”按钮

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

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

开始使用

您必须先配置开发环境,然后才能试用该示例代码。如需了解详情,请参阅 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-main/GoogleMaps-Swift pod install open GoogleMapsSwiftDemos.xcworkspace

    Objective-C

    cd maps-sdk-for-ios-samples-main/GoogleMaps pod install open GoogleMapsDemos.xcworkspace
  3. 在 Xcode 中,按下“编译”按钮,使用当前方案构建应用。构建会产生错误,提示您在 Swift 的 SDKConstants.swift 文件或 Objective-C 的 SDKDemoAPIKey.h 文件中输入 API 密钥。
  4. 已启用 Maps SDK for iOS 的项目中获取 API 密钥
  5. 针对 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";
  6. 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.
  7. 构建并运行项目。系统随即会显示 iOS 模拟器窗口,其中列出了 Maps SDK 演示版
  8. 选择显示的选项之一,以便试用 Maps SDK for iOS 的某项功能。
  9. 如果系统提示您允许 GoogleMapsDemos 访问您的位置信息,请选择允许