
Информационные окна содержат описания отдельных маркеров и открываются при нажатии на них.
Информационное окно размещается по центру над соответствующим маркером, при этом учитывается ориентация экрана устройства. По умолчанию информационное окно содержит заголовок, выделенный полужирным шрифтом, и текст описания под ним.
Содержимое информационного окна определяется свойствами маркера 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;
Обработка событий в информационных окнах
Вы можете отслеживать следующие события информационных окон:
mapView:markerInfoWindow:– вызывается, когда маркер вот-вот будет выбран. При необходимости может возвращать пользовательское информационное окно в виде объектаUIView, которое будет использоваться для маркера. Подробнее о пользовательских информационных окнах…mapView:markerInfoContents:– вызывается, когдаmapView:markerInfoWindowвозвращает nil.mapView:didCloseInfoWindowOfMarker:– вызывается, когда закрывается информационное окно маркера.mapView:didLongPressInfoWindowOfMarker:– вызывается после долгого нажатия на информационное окно маркера.
Чтобы отслеживать события, необходимо реализовать протокол GMSMapViewDelegate. Ознакомьтесь с руководством по событиям и списком методов в GMSMapViewDelegate.
GitHub содержит примеры, демонстрирующие обработку событий информационного окна:
Персонализация информационных окон
Чтобы настроить содержимое информационных окон, создайте подкласс UIView, который определяет макет собственного информационного окна. В этом подклассе
определите представление так, как вам нужно. Например, вы можете использовать пользовательские экземпляры UILabel для отображения заголовка и текста фрагмента, а также другие представления, такие как экземпляры UIImageView, чтобы добавить изображения, отображаемые в информационном окне.
Убедитесь, что ваш ViewController реализует протокол GMSIndoorDisplayDelegate и определяет прослушиватель для события mapView:markerInfoWindow:. Этот прослушиватель событий вызывается, когда маркер вот-вот будет выбран, и позволяет вернуть экземпляр вашего пользовательского класса UIView, чтобы определить пользовательское информационное окно, используемое маркером.
Ниже показаны информационное окно по умолчанию, окно с персонализированным содержанием и окно с измененными рамкой и фоном.
Примеры кода для Maps SDK для iOS на GitHub включают примеры собственных информационных окон. Например, посмотрите определение MarkerInfoWindowViewController.m (Objective-C) или MarkerInfoWindowViewController.swift (Swift).
Информацию о том, как скачать и запустить эти примеры, вы найдете в примерах кода.