Используя Maps SDK для iOS, вы можете прослушивать события, происходящие на карте, такие как события смены камеры или события нажатия маркера.
Введение
 Для прослушивания событий необходимо реализовать протокол GMSMapViewDelegate . Обычно этот протокол реализуется на контроллере представления, отображающем карту. Ниже приведён пример: 
Быстрый
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
 При создании объекта GMSMapView вы можете назначить его делегатом вашему контроллеру представления. GMSMapViewDelegate предоставляет только необязательные методы. Для прослушивания конкретного события необходимо реализовать соответствующий метод. 
Быстрый
override func loadView() { super.loadView() let camera = GMSCameraPosition.camera( withLatitude: 1.285, longitude: 103.848, zoom: 12 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } // MARK: GMSMapViewDelegate func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { print("You tapped at \(coordinate.latitude), \(coordinate.longitude)") }
Objective-C
- (void)loadView { [super loadView]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285 longitude:103.848 zoom:12]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate { NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude); }
Положение камеры
 Используя GMSMapViewDelegate , вы можете отслеживать изменения положения камеры, используемой для рендеринга карты. Существует три различных события.
- mapView:willMove:указывает на то, что положение камеры скоро изменится. Если аргумент- gestureимеет значение- YES, это происходит из-за того, что пользователь выполняет естественный жест в- GMSMapView, например, панорамирование или наклон. В противном случае- NOуказывает на то, что это часть программного изменения, например, с помощью таких методов, как- animateToCameraPosition:или непосредственного обновления слоя карты. Это также может быть- NO, если пользователь нажал кнопки «Моё местоположение» или «Компас», которые генерируют анимацию, изменяющую положение камеры.- Этот метод может быть вызван несколько раз, прежде чем будет вызван - mapView:idleAtCameraPosition:хотя обычно это происходит только в том случае, если анимация и жесты происходят одновременно — например, жест отменит любую текущую анимацию и вызовет- mapView:willMove:второй раз.
- mapView:didChangeCameraPosition:вызывается многократно во время жеста или анимации, всегда после вызова- mapView:willMove:. Ему передаётся промежуточное положение камеры.
- Наконец, как только камера в - GMSMapViewстановится неактивной, вызывается- mapView:idleAtCameraPosition:который задаёт соответствующее положение камеры. В этот момент все анимации и жесты останавливаются.- Приложения могут использовать это событие для запуска обновления маркеров или другого содержимого, отображаемого на - GMSMapView, вместо того, чтобы, например, перезагружать содержимое при каждой смене камеры.
 Например, приложение может очистить GMSMapView при движении, а затем выполнить обратное геокодирование позиции, в которой остановилась камера. 
Быстрый
let geocoder = GMSGeocoder() func mapView(_ mapView: GMSMapView, willMove gesture: Bool) { mapView.clear() } func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) { geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in guard error == nil else { return } if let result = response?.firstResult() { let marker = GMSMarker() marker.position = cameraPosition.target marker.title = result.lines?[0] marker.snippet = result.lines?[1] marker.map = mapView } } }
Objective-C
GMSGeocoder *geocoder; - (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture { [mapView clear]; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition { id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) { if (error != nil) { return; } GMSReverseGeocodeResult *result = response.firstResult; GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target]; marker.title = result.lines[0]; marker.snippet = result.lines[1]; marker.map = mapView; }; [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler]; }
Мероприятия, посвященные бизнесу и другим интересным местам
По умолчанию точки интереса (POI) отображаются на базовой карте вместе с соответствующими значками. К ним относятся парки, школы, правительственные здания и многое другое, а также коммерческие объекты, такие как магазины, рестораны и отели.
Вы можете реагировать на клики по объектам интереса. См. руководство по компаниям и другим объектам интереса .
Другие события
 Полный список методов GMSMapViewDelegate можно найти в справочном руководстве .