Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см . в примерах кода Maps SDK для iOS .
Посмотреть код
import GoogleMaps
import UIKit
final class PolylinesViewController: UIViewController {
private lazy var styles: [GMSStrokeStyle] = {
let greenStyle = GMSStrokeStyle.gradient(from: .green, to: UIColor.green.withAlphaComponent(0))
let redStyle = GMSStrokeStyle.gradient(from: UIColor.red.withAlphaComponent(0), to: .red)
return [greenStyle, redStyle, GMSStrokeStyle.solidColor(UIColor(white: 0, alpha: 0))]
}()
private var pathLength: Double = 0
private var pos: Double = 0
private var polylines: [GMSPolyline] = []
private lazy var mapView: GMSMapView = {
let camera = GMSCameraPosition(latitude: -30, longitude: -175, zoom: 3)
return GMSMapView(frame: .zero, camera: camera)
}()
override func loadView() {
view = mapView
mapView.accessibilityElementsHidden = true
}
override func viewDidLoad() {
super.viewDidLoad()
var path = GMSMutablePath()
path.addLatitude(-33.866901, longitude: 151.195988)
path.addLatitude(-18, longitude: 179)
path.addLatitude(21.291982, longitude: -157.821856)
path.addLatitude(37.423802, longitude: -122.091859)
path.addLatitude(-12, longitude: -77)
path.addLatitude(-33.866901, longitude: 151.195988)
path = path.pathOffset(byLatitude: -30, longitude: 0)
pathLength = path.length(of: .geodesic) / 21
for i in 0..<30 {
let polyline = GMSPolyline(path: path.pathOffset(byLatitude: Double(i) * 1.5, longitude: 0))
polyline.strokeWidth = 8
polyline.geodesic = true
polyline.map = mapView
polylines.append(polyline)
}
animatePath()
}
// Updates the path style every 0.1 seconds.
private func animatePath() {
polylines.forEach {
if let path = $0.path {
$0.spans = GMSStyleSpansOffset(path, styles, [NSNumber(value: pathLength)], .geodesic, pos)
}
}
pos -= 50000
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
self.animatePath()
}
}
}
#import "GoogleMapsDemos/Samples/PolylinesViewController.h"
#import <GoogleMaps/GoogleMaps.h>
static CLLocationCoordinate2D kSydneyAustralia = {-33.866901, 151.195988};
static CLLocationCoordinate2D kHawaiiUSA = {21.291982, -157.821856};
static CLLocationCoordinate2D kFiji = {-18, 179};
static CLLocationCoordinate2D kMountainViewUSA = {37.423802, -122.091859};
static CLLocationCoordinate2D kLimaPeru = {-12, -77};
static bool kAnimate = true;
@implementation PolylinesViewController {
NSArray *_styles;
NSArray *_lengths;
NSArray *_polys;
double _pos, _step;
GMSMapView *_mapView;
}
- (void)tick {
for (GMSPolyline *poly in _polys) {
poly.spans = GMSStyleSpansOffset(poly.path, _styles, _lengths, kGMSLengthGeodesic, _pos);
}
_pos -= _step;
if (kAnimate) {
__weak id weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC / 10), dispatch_get_main_queue(),
^{
[weakSelf tick];
});
}
}
- (void)initLines {
if (!_polys) {
NSMutableArray *polys = [NSMutableArray array];
GMSMutablePath *path = [GMSMutablePath path];
[path addCoordinate:kSydneyAustralia];
[path addCoordinate:kFiji];
[path addCoordinate:kHawaiiUSA];
[path addCoordinate:kMountainViewUSA];
[path addCoordinate:kLimaPeru];
[path addCoordinate:kSydneyAustralia];
path = [path pathOffsetByLatitude:-30 longitude:0];
_lengths = @[ @([path lengthOfKind:kGMSLengthGeodesic] / 21) ];
for (int i = 0; i < 30; ++i) {
GMSPolyline *poly = [[GMSPolyline alloc] init];
poly.path = [path pathOffsetByLatitude:(i * 1.5) longitude:0];
poly.strokeWidth = 8;
poly.geodesic = YES;
poly.map = _mapView;
[polys addObject:poly];
}
_polys = polys;
}
}
- (void)viewDidLoad {
[super viewDidLoad];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-30 longitude:-175 zoom:3];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.accessibilityElementsHidden = YES;
self.view = mapView;
_mapView = mapView;
CGFloat alpha = 1;
UIColor *green = [UIColor colorWithRed:0 green:1 blue:0 alpha:alpha];
UIColor *greenTransp = [UIColor colorWithRed:0 green:1 blue:0 alpha:0];
UIColor *red = [UIColor colorWithRed:1 green:0 blue:0 alpha:alpha];
UIColor *redTransp = [UIColor colorWithRed:1 green:0 blue:0 alpha:0];
GMSStrokeStyle *grad1 = [GMSStrokeStyle gradientFromColor:green toColor:greenTransp];
GMSStrokeStyle *grad2 = [GMSStrokeStyle gradientFromColor:redTransp toColor:red];
_styles = @[
grad1,
grad2,
[GMSStrokeStyle solidColor:[UIColor colorWithWhite:0 alpha:0]],
];
_step = 50000;
[self initLines];
[self tick];
}
@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 доступ к вашему местоположению, выберите «Разрешить» .