
Информационные окна содержат описания отдельных маркеров и открываются при нажатии на них.
Информационное окно размещается по центру над соответствующим маркером, при этом учитывается ориентация экрана устройства. По умолчанию информационное окно содержит заголовок, выделенный полужирным шрифтом, и текст описания под ним.
Содержимое информационного окна определяется свойствами маркера 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, чтобы определить пользовательское информационное окно, используемое маркером.
Ниже показаны информационное окно по умолчанию, окно с персонализированным содержанием и окно с измененными рамкой и фоном.
Примеры кода на GitHub, поставляемые с Maps SDK для iOS, включают примеры пользовательских информационных окон. Пример определения см. в файле MarkerInfoWindowViewController.m (Objective-C) или MarkerInfoWindowViewController.swift (Swift).
Информацию о том, как скачать и запустить эти примеры, вы найдете в разделе Примеры кода.