Attivazione del pulsante La mia posizione

Immagine di Attiva il pulsante La mia posizione.

Il pulsante La mia posizione viene visualizzato nell'angolo in basso a destra della visualizzazione della mappa. Quando l'utente tocca il pulsante, la mappa si sposta sulla posizione attuale dell'utente.

Inizia

Prima di poter provare il codice di esempio, devi configurare l'ambiente di sviluppo. Per ulteriori informazioni, consulta Esempi di codice di Maps SDK for iOS.

Visualizzare il codice

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
      

Esegui l'app di esempio completa in locale

L'app di esempio dell'SDK Maps per iOS è disponibile come archivio di download da GitHub. Segui questi passaggi per installare e provare l'app di esempio dell'SDK Maps per iOS.

  1. Esegui git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git per clonare il repository di esempi in una directory locale.
  2. Apri una finestra del terminale, vai alla directory in cui hai clonato i file di esempio e vai alla directory 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. Nel progetto Xcode, vai a File > Add Package Dependencies (Aggiungi dipendenze pacchetto). Inserisci https://github.com/googlemaps/ios-maps-sdk come URL, premi Invio per importare il pacchetto e fai clic su Aggiungi pacchetto.
  4. In Xcode, premi il pulsante di compilazione per creare l'app con lo schema corrente. La build genera un errore, che ti chiede di inserire la chiave API nel file SDKConstants.swift per Swift o nel fileSDKDemoAPIKey.h per Objective-C.
  5. Ottieni una chiave API dal tuo progetto con l'SDK Maps per iOS attivato.
  6. Modifica il file SDKConstants.swift per Swift o il file SDKDemoAPIKey.h per Objective-C e incolla la chiave API nella definizione della costante apiKey o kAPIKey. Ad esempio:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  7. Nel file SDKConstants.swift (Swift) o SDKDemoAPIKey.h (Objective-C), rimuovi la seguente riga, perché viene utilizzata per registrare il problema definito dall'utente:

    Swift

    #error (Register for API Key and insert here. Then delete this line.)

    Objective-C

    #error Register for API Key and insert here.
  8. Crea ed esegui il progetto. Viene visualizzata la finestra del simulatore iOS, che mostra un elenco di demo di Maps SDK.
  9. Scegli una delle opzioni visualizzate per provare una funzionalità di Maps SDK for iOS.
  10. Se ti viene chiesto di consentire a GoogleMapsDemos di accedere alla tua posizione, scegli Consenti.