我想標註標題Mapbox
標記標註默認顯示爲而不是可點擊。 API是否提供了這種可能性?如何讓默認顯示的Mapbox標註標記永遠不會被解僱?
編輯:
其實我真正需要的是在這裏:如何顯示在默認情況下顯示的標註標誌,絕不解僱。
我想標註標題Mapbox
標記標註默認顯示爲而不是可點擊。 API是否提供了這種可能性?如何讓默認顯示的Mapbox標註標記永遠不會被解僱?
編輯:
其實我真正需要的是在這裏:如何顯示在默認情況下顯示的標註標誌,絕不解僱。
要選擇一個註釋,並顯示it's標題不點擊它,這應該是足夠了:
mapView.selectAnnotation(annotation, animated: true)
如果你想顯示that's不可能所有的標題做的,只有一個是可能的。
從您的評論,參見下面的更新:
繼承MKMapViewDelegate
並在viewDidLoad
設置map.delegate = self
。
在地圖上添加點按手勢以檢測annotations
以外的點擊。
let tap = UITapGestureRecognizer(target: self, action: #selector(tappedOnMap))
map.addGestureRecognizer(tap)
現在我們有兩個功能一起工作:
func tappedOnMap(_ gesture: UITapGestureRecognizer){
mapTapped = true
}
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
if mapTapped {
map.selectAnnotation(map.annotations[1], animated: true)
}
}
當你在地圖上輕點tappedOnMap
函數將被調用。當您點擊註釋之外時,系統將自動調用didDeselect
這就是爲什麼我已經聲明mapTapped Bool
變量用於跟蹤用戶是否已在地圖上或註釋中輕觸。在didDeselect
中,您可以設置應在if語句中顯示哪個默認標題。
因此,基本上,您可以檢測註釋外部的水龍頭和didDeselect
函數中的水龍頭,檢查它是否在註記上或地圖上輕按。如果它在地圖上,則顯示默認或任何您喜歡的註釋標題,否則用戶點擊註釋。您也可以隨時返回默認的註釋,這麼做消除在didDeselect
功能的if語句,只是設置map.selectAnnotation...
Here是我爲您創建與嘗試的示例項目。
這是我answer
我原來的問題:
mapView.selectAnnotation(annotation, animated: false)
MGLCallOutView
和disabling
交互或其內部可定位組件(通過將userinteractionenabled
設置爲false
)。您將通過此代理方法傳遞您的新標註實例:func mapView(_ mapView: MGLMapView, calloutViewFor annotation: MGLAnnotation) -> UIView?
符合MGLMapViewDelegate
。實際上,正如我在更新的問題中提到的,我真正想要的是防止每當我們與地圖交互時隱藏標註。
首先;一個人應該知道這是而不是的常見行爲:通過點擊標註以外的地方,它會消失,但在地圖上平移或縮放不會消除標註。
如果你還是希望有這種特定的行爲有兩種可能的方式來做到這一點:
使自定義MGLAnnotationView
與用戶交互上禁用。註釋視圖將處理註釋標題的顯示,但不會被選中。確保在這種情況下您可以觸發標註的顯示。
定製MGLCallOutView
並覆蓋dismissCallout
方法。在此方法中,您可以確保您不會忽視視圖。
這裏有一些資源的例子是幫我找到這些解決方案:
Annotation View
:https://www.mapbox.com/ios-sdk/examples/annotation-views/Callout View
:https://www.mapbox.com/ios-sdk/examples/custom-callout/請注意,第二解決方案可能更hacky,我會鼓勵去尋找第一個解決方案。
如果你想要做所有的註釋,你可以循環訪問'mapView.annotations'嗎? – MacStation
@MacStation,這也不起作用。蘋果已被封鎖,因此一次只能有一個註釋處於活動狀態。 –
+1好點。我同時也找出了這種方法,但我仍然可以選擇/取消選擇註釋。我希望確保標題始終可見,而不管用戶與地圖的交互情況如何。我仍然沒有找到最後一部分的解決方案。 – tiguero