Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см . в примерах кода Maps SDK для iOS .
Посмотреть код
Быстрый
import GoogleMaps import UIKit final class MarkerInfoWindowViewController: UIViewController { private let sydneyMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -33.8683, longitude: 151.2086)) private let melbourneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -37.81969, longitude: 144.966085)) private let brisbaneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -27.4710107, longitude: 153.0234489)) private lazy var contentView: UIImageView = { return UIImageView(image: UIImage(named: "aeroplane")) }() override func loadView() { let cameraPosition = GMSCameraPosition(latitude: -37.81969, longitude: 144.966085, zoom: 4) let mapView = GMSMapView(frame: .zero, camera: cameraPosition) mapView.delegate = self view = mapView sydneyMarker.title = "Sydney" sydneyMarker.snippet = "Population: 4,605,992" sydneyMarker.map = mapView melbourneMarker.title = "Melbourne" melbourneMarker.snippet = "Population: 4,169,103" melbourneMarker.map = mapView brisbaneMarker.title = "Brisbane" brisbaneMarker.snippet = "Population: 2,189,878" brisbaneMarker.map = mapView } } extension MarkerInfoWindowViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { if marker == sydneyMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? { if marker == brisbaneMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, didCloseInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") closed.") } func mapView(_ mapView: GMSMapView, didLongPressInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") long pressed.") } } extension UIViewController { func showToast(message: String) { let toast = UIAlertController(title: nil, message: message, preferredStyle: .alert) present( toast, animated: true, completion: { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(2)) { toast.dismiss(animated: true) } }) } }
Цель-C
#import "GoogleMapsDemos/Samples/MarkerInfoWindowViewController.h" #import "GoogleMapsDemos/UIViewController+GMSToastMessages.h" #import <GoogleMaps/GoogleMaps.h> @interface MarkerInfoWindowViewController () <GMSMapViewDelegate> @end @implementation MarkerInfoWindowViewController { GMSMarker *_sydneyMarker; GMSMarker *_melbourneMarker; GMSMarker *_brisbaneMarker; UIView *_contentView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-37.81969 longitude:144.966085 zoom:4]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _sydneyMarker = [[GMSMarker alloc] init]; _sydneyMarker.title = @"Sydney"; _sydneyMarker.snippet = @"Population: 4,605,992"; _sydneyMarker.position = CLLocationCoordinate2DMake(-33.8683, 151.2086); _sydneyMarker.map = mapView; NSLog(@"sydneyMarker: %@", _sydneyMarker); _melbourneMarker.map = nil; _melbourneMarker = [[GMSMarker alloc] init]; _melbourneMarker.title = @"Melbourne"; _melbourneMarker.snippet = @"Population: 4,169,103"; _melbourneMarker.position = CLLocationCoordinate2DMake(-37.81969, 144.966085); _melbourneMarker.map = mapView; NSLog(@"melbourneMarker: %@", _melbourneMarker); _brisbaneMarker.map = nil; _brisbaneMarker = [[GMSMarker alloc] init]; _brisbaneMarker.title = @"Brisbane"; _brisbaneMarker.snippet = @"Population: 2,189,878"; _brisbaneMarker.position = CLLocationCoordinate2DMake(-27.4710107, 153.0234489); _brisbaneMarker.map = mapView; NSLog(@"brisbaneMarker: %@", _brisbaneMarker); _contentView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"aeroplane"]]; mapView.delegate = self; self.view = mapView; } #pragma mark GMSMapViewDelegate - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { if (marker == _sydneyMarker) { return _contentView; } return nil; } - (UIView *)mapView:(GMSMapView *)mapView markerInfoContents:(GMSMarker *)marker { if (marker == _brisbaneMarker) { return _contentView; } return nil; } - (void)mapView:(GMSMapView *)mapView didCloseInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ closed.", marker.title]; [self gms_showToastWithMessage:message]; } - (void)mapView:(GMSMapView *)mapView didLongPressInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ long pressed.", marker.title]; [self gms_showToastWithMessage:message]; } @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 Console и получить ключ API. При настройке ключа в Cloud Console вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения 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 доступ к вашему местоположению, выберите «Разрешить» .
Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см . в примерах кода Maps SDK для iOS .
Посмотреть код
Быстрый
import GoogleMaps import UIKit final class MarkerInfoWindowViewController: UIViewController { private let sydneyMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -33.8683, longitude: 151.2086)) private let melbourneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -37.81969, longitude: 144.966085)) private let brisbaneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -27.4710107, longitude: 153.0234489)) private lazy var contentView: UIImageView = { return UIImageView(image: UIImage(named: "aeroplane")) }() override func loadView() { let cameraPosition = GMSCameraPosition(latitude: -37.81969, longitude: 144.966085, zoom: 4) let mapView = GMSMapView(frame: .zero, camera: cameraPosition) mapView.delegate = self view = mapView sydneyMarker.title = "Sydney" sydneyMarker.snippet = "Population: 4,605,992" sydneyMarker.map = mapView melbourneMarker.title = "Melbourne" melbourneMarker.snippet = "Population: 4,169,103" melbourneMarker.map = mapView brisbaneMarker.title = "Brisbane" brisbaneMarker.snippet = "Population: 2,189,878" brisbaneMarker.map = mapView } } extension MarkerInfoWindowViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { if marker == sydneyMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? { if marker == brisbaneMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, didCloseInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") closed.") } func mapView(_ mapView: GMSMapView, didLongPressInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") long pressed.") } } extension UIViewController { func showToast(message: String) { let toast = UIAlertController(title: nil, message: message, preferredStyle: .alert) present( toast, animated: true, completion: { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(2)) { toast.dismiss(animated: true) } }) } }
Цель-C
#import "GoogleMapsDemos/Samples/MarkerInfoWindowViewController.h" #import "GoogleMapsDemos/UIViewController+GMSToastMessages.h" #import <GoogleMaps/GoogleMaps.h> @interface MarkerInfoWindowViewController () <GMSMapViewDelegate> @end @implementation MarkerInfoWindowViewController { GMSMarker *_sydneyMarker; GMSMarker *_melbourneMarker; GMSMarker *_brisbaneMarker; UIView *_contentView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-37.81969 longitude:144.966085 zoom:4]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _sydneyMarker = [[GMSMarker alloc] init]; _sydneyMarker.title = @"Sydney"; _sydneyMarker.snippet = @"Population: 4,605,992"; _sydneyMarker.position = CLLocationCoordinate2DMake(-33.8683, 151.2086); _sydneyMarker.map = mapView; NSLog(@"sydneyMarker: %@", _sydneyMarker); _melbourneMarker.map = nil; _melbourneMarker = [[GMSMarker alloc] init]; _melbourneMarker.title = @"Melbourne"; _melbourneMarker.snippet = @"Population: 4,169,103"; _melbourneMarker.position = CLLocationCoordinate2DMake(-37.81969, 144.966085); _melbourneMarker.map = mapView; NSLog(@"melbourneMarker: %@", _melbourneMarker); _brisbaneMarker.map = nil; _brisbaneMarker = [[GMSMarker alloc] init]; _brisbaneMarker.title = @"Brisbane"; _brisbaneMarker.snippet = @"Population: 2,189,878"; _brisbaneMarker.position = CLLocationCoordinate2DMake(-27.4710107, 153.0234489); _brisbaneMarker.map = mapView; NSLog(@"brisbaneMarker: %@", _brisbaneMarker); _contentView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"aeroplane"]]; mapView.delegate = self; self.view = mapView; } #pragma mark GMSMapViewDelegate - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { if (marker == _sydneyMarker) { return _contentView; } return nil; } - (UIView *)mapView:(GMSMapView *)mapView markerInfoContents:(GMSMarker *)marker { if (marker == _brisbaneMarker) { return _contentView; } return nil; } - (void)mapView:(GMSMapView *)mapView didCloseInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ closed.", marker.title]; [self gms_showToastWithMessage:message]; } - (void)mapView:(GMSMapView *)mapView didLongPressInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ long pressed.", marker.title]; [self gms_showToastWithMessage:message]; } @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 Console и получить ключ API. При настройке ключа в Cloud Console вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения 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 доступ к вашему местоположению, выберите «Разрешить» .
Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см . в примерах кода Maps SDK для iOS .
Посмотреть код
Быстрый
import GoogleMaps import UIKit final class MarkerInfoWindowViewController: UIViewController { private let sydneyMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -33.8683, longitude: 151.2086)) private let melbourneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -37.81969, longitude: 144.966085)) private let brisbaneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -27.4710107, longitude: 153.0234489)) private lazy var contentView: UIImageView = { return UIImageView(image: UIImage(named: "aeroplane")) }() override func loadView() { let cameraPosition = GMSCameraPosition(latitude: -37.81969, longitude: 144.966085, zoom: 4) let mapView = GMSMapView(frame: .zero, camera: cameraPosition) mapView.delegate = self view = mapView sydneyMarker.title = "Sydney" sydneyMarker.snippet = "Population: 4,605,992" sydneyMarker.map = mapView melbourneMarker.title = "Melbourne" melbourneMarker.snippet = "Population: 4,169,103" melbourneMarker.map = mapView brisbaneMarker.title = "Brisbane" brisbaneMarker.snippet = "Population: 2,189,878" brisbaneMarker.map = mapView } } extension MarkerInfoWindowViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { if marker == sydneyMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? { if marker == brisbaneMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, didCloseInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") closed.") } func mapView(_ mapView: GMSMapView, didLongPressInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") long pressed.") } } extension UIViewController { func showToast(message: String) { let toast = UIAlertController(title: nil, message: message, preferredStyle: .alert) present( toast, animated: true, completion: { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(2)) { toast.dismiss(animated: true) } }) } }
Цель-C
#import "GoogleMapsDemos/Samples/MarkerInfoWindowViewController.h" #import "GoogleMapsDemos/UIViewController+GMSToastMessages.h" #import <GoogleMaps/GoogleMaps.h> @interface MarkerInfoWindowViewController () <GMSMapViewDelegate> @end @implementation MarkerInfoWindowViewController { GMSMarker *_sydneyMarker; GMSMarker *_melbourneMarker; GMSMarker *_brisbaneMarker; UIView *_contentView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-37.81969 longitude:144.966085 zoom:4]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _sydneyMarker = [[GMSMarker alloc] init]; _sydneyMarker.title = @"Sydney"; _sydneyMarker.snippet = @"Population: 4,605,992"; _sydneyMarker.position = CLLocationCoordinate2DMake(-33.8683, 151.2086); _sydneyMarker.map = mapView; NSLog(@"sydneyMarker: %@", _sydneyMarker); _melbourneMarker.map = nil; _melbourneMarker = [[GMSMarker alloc] init]; _melbourneMarker.title = @"Melbourne"; _melbourneMarker.snippet = @"Population: 4,169,103"; _melbourneMarker.position = CLLocationCoordinate2DMake(-37.81969, 144.966085); _melbourneMarker.map = mapView; NSLog(@"melbourneMarker: %@", _melbourneMarker); _brisbaneMarker.map = nil; _brisbaneMarker = [[GMSMarker alloc] init]; _brisbaneMarker.title = @"Brisbane"; _brisbaneMarker.snippet = @"Population: 2,189,878"; _brisbaneMarker.position = CLLocationCoordinate2DMake(-27.4710107, 153.0234489); _brisbaneMarker.map = mapView; NSLog(@"brisbaneMarker: %@", _brisbaneMarker); _contentView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"aeroplane"]]; mapView.delegate = self; self.view = mapView; } #pragma mark GMSMapViewDelegate - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { if (marker == _sydneyMarker) { return _contentView; } return nil; } - (UIView *)mapView:(GMSMapView *)mapView markerInfoContents:(GMSMarker *)marker { if (marker == _brisbaneMarker) { return _contentView; } return nil; } - (void)mapView:(GMSMapView *)mapView didCloseInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ closed.", marker.title]; [self gms_showToastWithMessage:message]; } - (void)mapView:(GMSMapView *)mapView didLongPressInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ long pressed.", marker.title]; [self gms_showToastWithMessage:message]; } @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 Console и получить ключ API. При настройке ключа в Cloud Console вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения 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 доступ к вашему местоположению, выберите «Разрешить» .
Начать
Прежде чем вы сможете опробовать пример кода, вам необходимо настроить среду разработки. Дополнительную информацию см . в примерах кода Maps SDK для iOS .
Посмотреть код
Быстрый
import GoogleMaps import UIKit final class MarkerInfoWindowViewController: UIViewController { private let sydneyMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -33.8683, longitude: 151.2086)) private let melbourneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -37.81969, longitude: 144.966085)) private let brisbaneMarker = GMSMarker( position: CLLocationCoordinate2D(latitude: -27.4710107, longitude: 153.0234489)) private lazy var contentView: UIImageView = { return UIImageView(image: UIImage(named: "aeroplane")) }() override func loadView() { let cameraPosition = GMSCameraPosition(latitude: -37.81969, longitude: 144.966085, zoom: 4) let mapView = GMSMapView(frame: .zero, camera: cameraPosition) mapView.delegate = self view = mapView sydneyMarker.title = "Sydney" sydneyMarker.snippet = "Population: 4,605,992" sydneyMarker.map = mapView melbourneMarker.title = "Melbourne" melbourneMarker.snippet = "Population: 4,169,103" melbourneMarker.map = mapView brisbaneMarker.title = "Brisbane" brisbaneMarker.snippet = "Population: 2,189,878" brisbaneMarker.map = mapView } } extension MarkerInfoWindowViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { if marker == sydneyMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView? { if marker == brisbaneMarker { return contentView } return nil } func mapView(_ mapView: GMSMapView, didCloseInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") closed.") } func mapView(_ mapView: GMSMapView, didLongPressInfoWindowOf marker: GMSMarker) { showToast(message: "Info window for marker \(marker.title ?? "") long pressed.") } } extension UIViewController { func showToast(message: String) { let toast = UIAlertController(title: nil, message: message, preferredStyle: .alert) present( toast, animated: true, completion: { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(2)) { toast.dismiss(animated: true) } }) } }
Цель-C
#import "GoogleMapsDemos/Samples/MarkerInfoWindowViewController.h" #import "GoogleMapsDemos/UIViewController+GMSToastMessages.h" #import <GoogleMaps/GoogleMaps.h> @interface MarkerInfoWindowViewController () <GMSMapViewDelegate> @end @implementation MarkerInfoWindowViewController { GMSMarker *_sydneyMarker; GMSMarker *_melbourneMarker; GMSMarker *_brisbaneMarker; UIView *_contentView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-37.81969 longitude:144.966085 zoom:4]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _sydneyMarker = [[GMSMarker alloc] init]; _sydneyMarker.title = @"Sydney"; _sydneyMarker.snippet = @"Population: 4,605,992"; _sydneyMarker.position = CLLocationCoordinate2DMake(-33.8683, 151.2086); _sydneyMarker.map = mapView; NSLog(@"sydneyMarker: %@", _sydneyMarker); _melbourneMarker.map = nil; _melbourneMarker = [[GMSMarker alloc] init]; _melbourneMarker.title = @"Melbourne"; _melbourneMarker.snippet = @"Population: 4,169,103"; _melbourneMarker.position = CLLocationCoordinate2DMake(-37.81969, 144.966085); _melbourneMarker.map = mapView; NSLog(@"melbourneMarker: %@", _melbourneMarker); _brisbaneMarker.map = nil; _brisbaneMarker = [[GMSMarker alloc] init]; _brisbaneMarker.title = @"Brisbane"; _brisbaneMarker.snippet = @"Population: 2,189,878"; _brisbaneMarker.position = CLLocationCoordinate2DMake(-27.4710107, 153.0234489); _brisbaneMarker.map = mapView; NSLog(@"brisbaneMarker: %@", _brisbaneMarker); _contentView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"aeroplane"]]; mapView.delegate = self; self.view = mapView; } #pragma mark GMSMapViewDelegate - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { if (marker == _sydneyMarker) { return _contentView; } return nil; } - (UIView *)mapView:(GMSMapView *)mapView markerInfoContents:(GMSMarker *)marker { if (marker == _brisbaneMarker) { return _contentView; } return nil; } - (void)mapView:(GMSMapView *)mapView didCloseInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ closed.", marker.title]; [self gms_showToastWithMessage:message]; } - (void)mapView:(GMSMapView *)mapView didLongPressInfoWindowOfMarker:(GMSMarker *)marker { NSString *message = [NSString stringWithFormat:@"Info window for marker %@ long pressed.", marker.title]; [self gms_showToastWithMessage:message]; } @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 Console и получить ключ API. При настройке ключа в Cloud Console вы можете ограничить ключ идентификатором пакета примера приложения, чтобы гарантировать, что только ваше приложение может использовать ключ. Идентификатор пакета по умолчанию для примера приложения 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 доступ к вашему местоположению, выберите «Разрешить» .