信息窗口

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
选择平台Android iOS JavaScript

信息窗口上方会显示一个信息窗口。

在用户点按标记时,您可以通过信息窗口向其显示信息。

信息窗口绘制时朝向设备屏幕的相反方向,在其关联标记的上方居中显示。默认信息窗口包含以粗体显示的标题,且标题下方会显示摘要文本。

信息窗口的内容由标记的 titlesnippet 属性定义。如果 titlesnippet 属性均为空或 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;
      

显示/隐藏信息窗口

信息窗口设计用于响应标记上的用户触摸事件。您可以通过设置 GMSMapViewselectedMarker 属性以编程方式显示或隐藏信息窗口:

  • 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 设置为 YEStrue。默认值为 NOfalse

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 类的实例,以定义标记使用的自定义信息窗口。

以下图像显示的是一个默认信息窗口、一个包含自定义内容的信息窗口以及一个包含自定义框架和背景的信息窗口。

信息窗口对比

GitHub 上随 Maps SDK for iOS 提供的代码示例包含自定义信息窗口的示例。有关示例,请参阅 MarkerInfoWindowViewController.m (Objective-C) 或 MarkerInfoWindowViewController.swift (Swift) 的定义。

如需了解如何下载和运行这些示例,请参阅代码示例