Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см. в примерах кода Maps SDK для iOS .
Посмотреть код
Быстрый
import GoogleMaps import UIKit final class MarkerEventsViewController: UIViewController { private lazy var mapView: GMSMapView = { let camera = GMSCameraPosition(latitude: -37.81969, longitude: 144.966085, zoom: 4) return GMSMapView(frame: .zero, camera: camera) }() private var melbourneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -37.81969, longitude: 144.966085)) override func loadView() { let sydneyMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -33.8683, longitude: 151.2086)) sydneyMarker.map = mapView melbourneMarker.map = mapView mapView.delegate = self view = mapView } } extension MarkerEventsViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { if marker == melbourneMarker { return UIImageView(image: UIImage(named: "Icon")) } return nil } func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { // Animate to the marker CATransaction.begin() CATransaction.setAnimationDuration(3) let camera = GMSCameraPosition(target: marker.position, zoom: 8, bearing: 50, viewingAngle: 60) mapView.animate(to: camera) CATransaction.commit() // Melbourne marker has a InfoWindow so return false to allow markerInfoWindow to // fire. Also check that the marker isn't already selected so that the InfoWindow // doesn't close. if marker == melbourneMarker && mapView.selectedMarker != melbourneMarker { return false } return true } }
Цель-C
#import "GoogleMapsDemos/Samples/MarkerEventsViewController.h" #import <QuartzCore/QuartzCore.h> #import <GoogleMaps/GoogleMaps.h> @implementation MarkerEventsViewController { GMSMapView *_mapView; GMSMarker *_melbourneMarker; BOOL _rotating; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-37.81969 longitude:144.966085 zoom:4]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; GMSMarker *sydneyMarker = [[GMSMarker alloc] init]; sydneyMarker.position = CLLocationCoordinate2DMake(-33.8683, 151.2086); sydneyMarker.map = _mapView; _melbourneMarker = [[GMSMarker alloc] init]; _melbourneMarker.position = CLLocationCoordinate2DMake(-37.81969, 144.966085); _melbourneMarker.map = _mapView; _mapView.delegate = self; self.view = _mapView; } #pragma mark - GMSMapViewDelegate - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { if (marker == _melbourneMarker) { return [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Icon"]]; } return nil; } - (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker { GMSCameraPosition *camera = [[GMSCameraPosition alloc] initWithTarget:marker.position zoom:8 bearing:50 viewingAngle:60]; // Animate to the marker [CATransaction begin]; [CATransaction setAnimationDuration:3.f]; // 3 second animation [CATransaction setCompletionBlock:^{ if (_rotating) { // Animation was interrupted by orientation change. [CATransaction setDisableActions:true]; // Disable animation to avoid interruption from rotation. [_mapView animateToCameraPosition:camera]; } }]; [mapView animateToCameraPosition:camera]; [CATransaction commit]; // Melbourne marker has a InfoWindow so return NO to allow markerInfoWindow to fire. Also check // that the marker isn't already selected so that the InfoWindow doesn't close. if (marker == _melbourneMarker && mapView.selectedMarker != _melbourneMarker) { return NO; } // The Tap has been handled so return YES return YES; } - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { _rotating = true; [coordinator animateAlongsideTransition:nil completion:^( id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { _rotating = false; }]; [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; } @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
Цель-C
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 и получить ключ API. При настройке ключа в облачной консоли вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения SDK —
com.example.GoogleMapsDemos
. - Отредактируйте файл
SDKConstants.swift
для Swift или файлSDKDemoAPIKey.h
для Objective-C и вставьте свой ключ API в определение константыapiKey
илиkAPIKey
. Например:Быстрый
static let apiKey = "YOUR_API_KEY"
Цель-C
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.)
Цель-C
#error Register for API Key and insert here.
- Создайте и запустите проект. Появится окно симулятора iOS со списком демонстрационных версий Maps SDK .
- Выберите один из отображаемых вариантов, чтобы поэкспериментировать с функцией Maps SDK для iOS.
- Если будет предложено разрешить GoogleMapsDemos доступ к вашему местоположению, выберите «Разрешить» .