通过信息窗口,您可以在用户点按 标记。
信息窗口是根据设备屏幕的方向绘制的,上方居中 与其关联的标记。默认信息窗口包含以粗体显示的标题, 并在标题下方附加摘要文字
信息窗口的内容由 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
属性,以相对于标记。这个
属性接受定义为 (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;
处理信息窗口上的事件
您可以监听以下信息窗口事件:
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 for iOS 提供 包含自定义信息窗口的示例。有关示例,请参阅 MarkerInfoWindowViewController.m (Objective-C) 或 MarkerInfoWindowViewController.swift (Swift)。
请参阅代码示例,了解如何下载和运行 这些示例。