信息窗口

请选择平台: Android iOS JavaScript

一个信息窗口显示在标记上方。

通过信息窗口,您可以在用户点按 标记。

信息窗口是根据设备屏幕的方向绘制的,上方居中 与其关联的标记。默认信息窗口包含以粗体显示的标题, 并在标题下方附加摘要文字

信息窗口的内容由 title 和 标记的 snippet 属性。点击该标记时,系统不会显示 如果 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;
      

显示/隐藏信息窗口

信息窗口用于响应用户在标记上的触摸事件。 您可以通过设置 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 设置为 标记设置为 YEStrue(如果需要新属性或信息内容) 更改会立即显示,而不必等待 隐藏并再次显示信息窗口。默认值为 NOfalse

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

要决定何时设置 tracksInfoWindowChanges 资源,您 应将性能考虑因素与使用 系统会自动重新绘制信息窗口。例如:

  • 如果您需要进行一系列更改,则可以将该属性更改为 YES。 然后再恢复为 NO
  • 当动画正在运行或内容正在异步加载时, 您应将该属性设置为 YES,直到操作完成为止。

在以下情况下,另请参阅注意事项: 使用标记的 iconView 属性。

更改信息窗口的位置

信息窗口会自适应设备屏幕的方向,在其关联标记的正上方显示。您可以更改信息窗口的位置 设置 infoWindowAnchor 属性,以相对于标记。这个 属性接受定义为 (x,y) 偏移的 CGPoint,其中 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)。

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