Информационные окна

Выберите платформу: Android iOS JavaScript

Информационное окно над маркером.

Информационные окна содержат описания отдельных маркеров и открываются при нажатии на них.

Информационное окно размещается по центру над соответствующим маркером, при этом учитывается ориентация экрана устройства. По умолчанию информационное окно содержит заголовок, выделенный полужирным шрифтом, и текст описания под ним.

Содержимое информационного окна определяется свойствами маркера title и snippet. Если свойства title и snippet не заданы или имеют значение nil, то при нажатии на маркер информационное окно не открывается.

Одновременно может быть открыто только одно окно. Если пользователь нажмет на другой маркер, текущее информационное окно закроется и откроется новое. Если пользователь нажмет на маркер, для которого уже показывается информационное окно, то оно закроется и откроется снова.

Создайте собственное информационное окно, чтобы добавить текст или изображения. Специальное информационное окно позволяет полностью контролировать внешний вид всплывающего окна.

Добавление информационного окна

В следующем фрагменте кода создается простой маркер, в информационном окне которого есть только заголовок.

Swift

let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: position)
london.title = "London"
london.map = mapView
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.map = mapView;
      

Свойство snippet позволяет добавить дополнительный текст, который будет показываться под заголовком более мелким шрифтом. Строки, которые не помещаются в информационном окне, автоматически переносятся. Слишком длинные сообщения могут быть усечены.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
      

Отображение и скрытие информационного окна

Информационные окна предназначены для реагирования на события касания маркера пользователем. Вы можете программно показывать или скрывать информационное окно, задав свойство selectedMarker для GMSMapView:

  • Чтобы маркер показывался, задайте для свойства selectedMarker название маркера.
  • Чтобы скрыть его, задайте для параметра selectedMarker значение nil.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
// Show marker
mapView.selectedMarker = london
// Hide marker
mapView.selectedMarker = nil
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
// Show marker
mapView.selectedMarker = london;
// Hide marker
mapView.selectedMarker = nil;
      

Как настроить автоматическое обновление информационного окна

Если вы хотите, чтобы новые свойства или контент информационного окна отображались сразу после изменения, а не после того, как окно будет скрыто и снова показано, задайте для свойства tracksInfoWindowChanges маркера значение YES или true. Значение по умолчанию – NO или false.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

Чтобы решить, когда задавать свойство tracksInfoWindowChanges, необходимо сопоставить соображения производительности с преимуществами автоматической перерисовки информационного окна. Пример:

  • Если вам нужно внести несколько изменений, вы можете изменить свойство на YES, а затем снова на NO.
  • Если выполняется анимация или контент загружается асинхронно, свойство должно иметь значение YES до завершения этих действий.

Также ознакомьтесь с примечаниями по использованию свойства iconView маркера.

Изменение положения информационного окна

Информационное окно размещается по центру над соответствующим маркером, при этом учитывается ориентация экрана устройства. Вы можете изменить положение информационного окна относительно маркера, задав свойство infoWindowAnchor. Это свойство принимает значение CGPoint, которое определяется как смещение (x,y), где x и y находятся в диапазоне от 0,0 до 1,0. По умолчанию используется смещение (0,5, 0,0), то есть по центру сверху. Смещение infoWindowAnchor позволяет выровнять информационное окно относительно пользовательского значка.

Swift

london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5)
london.icon = UIImage(named: "house")
london.map = mapView
      

Objective-C

london.infoWindowAnchor = CGPointMake(0.5, 0.5);
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

Обработка событий в информационных окнах

Вы можете отслеживать следующие события информационных окон:

Чтобы отслеживать события, необходимо реализовать протокол GMSMapViewDelegate. Ознакомьтесь с руководством по событиям и списком методов в GMSMapViewDelegate.

GitHub содержит примеры, демонстрирующие обработку событий информационного окна:

Персонализация информационных окон

Чтобы настроить содержимое информационных окон, создайте подкласс UIView, который определяет макет собственного информационного окна. В этом подклассе определите представление так, как вам нужно. Например, вы можете использовать пользовательские экземпляры UILabel для отображения заголовка и текста фрагмента, а также другие представления, такие как экземпляры UIImageView, чтобы добавить изображения, отображаемые в информационном окне.

Убедитесь, что ваш ViewController реализует протокол GMSIndoorDisplayDelegate и определяет прослушиватель для события mapView:markerInfoWindow:. Этот прослушиватель событий вызывается, когда маркер вот-вот будет выбран, и позволяет вернуть экземпляр вашего пользовательского класса UIView, чтобы определить пользовательское информационное окно, используемое маркером.

Ниже показаны информационное окно по умолчанию, окно с персонализированным содержанием и окно с измененными рамкой и фоном.

Сравнение информационных окон

Примеры кода для Maps SDK для iOS на GitHub включают примеры собственных информационных окон. Например, посмотрите определение MarkerInfoWindowViewController.m (Objective-C) или MarkerInfoWindowViewController.swift (Swift).

Информацию о том, как скачать и запустить эти примеры, вы найдете в примерах кода.