Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см. в разделе «Примеры кода Maps SDK для iOS» .
Посмотреть код
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)
}
}
#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 для iOS доступен в виде архива для загрузки на GitHub . Выполните следующие действия, чтобы установить и опробовать пример приложения Maps SDK для iOS.
- Запустите
git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git
, чтобы клонировать репозиторий образцов в локальный каталог. Откройте окно терминала, перейдите в каталог, в который вы клонировали файлы примеров, и перейдите к каталогу GoogleMaps:
cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
pod install
open GoogleMapsSwiftDemos.xcworkspace
cd maps-sdk-for-ios-samples-main/GoogleMaps
pod install
open GoogleMapsDemos.xcworkspace
- В Xcode нажмите кнопку компиляции, чтобы создать приложение с текущей схемой. При сборке возникает ошибка, предлагающая ввести ключ API в файл
SDKConstants.swift
для Swift или файлSDKDemoAPIKey.h
для Objective-C. - Если у вас еще нет ключа API, следуйте инструкциям , чтобы настроить проект в Google Cloud Console и получить ключ API. При настройке ключа в Cloud Console вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения SDK —
com.example.GoogleMapsDemos
. - Отредактируйте файл
SDKConstants.swift
для Swift или файлSDKDemoAPIKey.h
для Objective-C и вставьте свой ключ API в определение константыapiKey
илиkAPIKey
. Например:static let apiKey = "
YOUR_API_KEY "static NSString *const kAPIKey = @"
YOUR_API_KEY "; - В файле
SDKConstants.swift
(Swift) или файлеSDKDemoAPIKey.h
(Objective-C) удалите следующую строку, поскольку она используется для регистрации определяемой пользователем проблемы:#error (Register for API Key and insert here. Then delete this line.)
#error Register for API Key and insert here.
- Создайте и запустите проект. Появится окно симулятора iOS со списком демонстраций Maps SDK .
- Выберите один из отображаемых вариантов, чтобы поэкспериментировать с функцией Maps SDK для iOS.
- Если будет предложено разрешить GoogleMapsDemos доступ к вашему местоположению, выберите «Разрешить» .