資訊視窗可讓您在使用者輕觸標記時向使用者顯示資訊。
資訊視窗會依據裝置螢幕方向顯示在相關標記的正上方,預設是顯示粗體字標題,如果還有文字片段,便會加在標題下方。
資訊視窗的內容是由標記的 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;
顯示/隱藏資訊視窗
資訊視窗用來回應使用者對標記的觸控事件。您可以設定 GMSMapView
的 selectedMarker
屬性,透過程式輔助方式顯示或隱藏資訊視窗:
- 將
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
屬性時,也請參閱注意事項注意事項</br>。
變更資訊視窗的位置
資訊視窗會依據裝置螢幕方向顯示在相關標記的正上方,您可以設定 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
類別的執行個體,以定義標記使用的自訂資訊視窗。
下方圖片分別顯示預設資訊視窗、包含自訂內容的資訊視窗,以及包含自訂頁框和背景的資訊視窗。

Maps SDK for iOS 提供的 GitHub 程式碼範例包含自訂資訊視窗的範例。舉例來說,請參閱 MarkerInfoWindowViewController.m (Objective-C) 或 MarkerInfoWindowViewController.swift (Swift) 定義。
如要瞭解如何下載及執行這些範例,請參閱程式碼範例。