使用者輕觸「資訊視窗」時, 標記。
資訊視窗會依據裝置畫面顯示在上方中央 相關的標記預設資訊視窗包含粗體字標題 並將程式碼片段文字置於標題下方。
資訊視窗的內容是由 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
類別的例項傳回給
會定義標記所使用的自訂資訊視窗。
下方圖片分別顯示預設資訊視窗、包含自訂內容的資訊視窗,以及包含自訂頁框和背景的資訊視窗。
![不同資訊視窗的比較。 資訊視窗比較](https://developers.google.cn/static/maps/documentation/images/marker-infowindows.png?authuser=6&hl=zh-tw)
這個 Google Cloud 專案的程式碼範例 GitHub Maps SDK for iOS 提供的 包括自訂資訊視窗的範例。如需範例,請參閱 MarkerInfoWindowViewController.m (Objective-C) 或 MarkerInfoWindowViewController.swift (Swift)。
請參閱程式碼範例,瞭解如何下載和執行 範例。