2017-03-16 49 views
2

我想弄清楚如何將長按手勢添加到地圖註記(Mapbox)。我設置了我的代碼,以便當用戶點擊註釋時,他們會繼續通過將我的代碼放入此函數來轉換爲另一種視圖。Swift 3將長按手勢添加到地圖框註釋

func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) { 
} 

現在我想允許用戶通過持有相同的批註繼續到另一個視圖。我嘗試在上面的代碼中使用if和else語句,但長按手勢不起作用,除非我先點擊註釋以激活該函數,以便if和else語句可以開始工作。但我不希望用戶點擊然後按住。我只是希望他們點擊或按住註釋。

謝謝你的答案提前

回答

0

我不熟悉的Mapbox API,但如果沒有合適的委託方法嘗試uigesturerecognizer和委託自己的自定義實現。

設置你的手勢識別器上標註的觀點:

let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressDetected)) 
annotation.view.addGestureRecognizer(longPressGestureRecognizer) 

作出委託

weak var delegate: AnnotationViewDelegate? 

,並在註釋子類的協議AnnotationViewDelegate

protocol AnnotationViewDelegate: class { 
    func annotationDidDetectLongPress() 
} 

執行長按處理器和通知代表長龍內

func longPressDetected(sender: UILongPressGestureRecognizer) { 
    // here you should notify the delegate 
    delegate?.annotationDidDetectLongPress() 
} 

指派代表到控制器自我和實現

func annotationDidDetectLongPress() { 
    // done 
} 
+0

好像長按是越來越添加到整個的MapView而不僅僅是annotationsView。而且我得到和協議的錯誤。說協議不能嵌套在另一個聲明 – Markinson

+0

@Markinson你能給你的回購鏈接,以便我可以檢查?這很難猜測,如果我沒有看到代碼... –

+0

對不起,我沒有我的代碼在github上:/ – Markinson