Włączanie przycisku Moja lokalizacja

Ilustracja przedstawiająca włączanie przycisku Moja lokalizacja.

Przycisk Moja lokalizacja jest widoczny w prawym dolnym rogu widoku mapy. Gdy użytkownik naciśnie ten przycisk, mapa przesunie się do jego bieżącej lokalizacji.

Rozpocznij

Zanim wypróbujesz przykładowy kod, musisz skonfigurować środowisko programistyczne. Więcej informacji znajdziesz w przykładach kodu pakietu Maps SDK na iOS.

Wyświetlanie kodu

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
      

Uruchamianie pełnej przykładowej aplikacji lokalnie

Przykładowa aplikacja Maps SDK na iOS jest dostępna jako archiwum do pobrania w GitHub. Aby zainstalować i wypróbować przykładową aplikację pakietu Maps SDK na iOS, wykonaj te czynności.

  1. Uruchom git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git, aby sklonować repozytorium z przykładami do katalogu lokalnego.
  2. Otwórz okno terminala, przejdź do katalogu, w którym zostały sklonowane pliki przykładowe, i otwórz katalog 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. W projekcie Xcode kliknij File (Plik) > Add Package Dependencies (Dodaj zależności pakietu). Wpisz https://github.com/googlemaps/ios-maps-sdk jako adres URL, naciśnij Enter, aby pobrać pakiet, a następnie kliknij Dodaj pakiet.
  4. W Xcode naciśnij przycisk kompilacji, aby skompilować aplikację z bieżącym schematem. Podczas kompilacji wystąpi błąd, który spowoduje wyświetlenie prośby o wpisanie klucza interfejsu API w pliku SDKConstants.swift w przypadku języka Swift lub w pliku SDKDemoAPIKey.h w przypadku języka Objective-C.
  5. Pobierz klucz interfejsu API z projektu, w którym włączony jest pakiet Maps SDK na iOS.
  6. Edytuj plik SDKConstants.swift w przypadku języka Swift lub plik SDKDemoAPIKey.h w przypadku języka Objective-C i wklej klucz interfejsu API do definicji stałej apiKey lub kAPIKey. Na przykład:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  7. W pliku SDKConstants.swift (Swift) lubSDKDemoAPIKey.h (Objective-C) usuń ten wiersz, ponieważ służy on do rejestrowania problemu zdefiniowanego przez użytkownika:

    Swift

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

    Objective-C

    #error Register for API Key and insert here.
  8. Skompiluj i uruchom projekt. Pojawi się okno symulatora iOS z listą demonstracji pakietu Maps SDK.
  9. Wybierz jedną z wyświetlonych opcji, aby wypróbować funkcję pakietu Maps SDK na iOS.
  10. Jeśli pojawi się pytanie, czy zezwolić aplikacji GoogleMapsDemos na dostęp do Twojej lokalizacji, kliknij Zezwól.