因此,我一直在寻找通向make an MGLPolyline tapable的方法。我考虑过的一种方法是使用MapBox添加的弹出窗口使之显示某些内容,但使弹出窗口不可见,这样一来,当对特定行进行录音时,我仍然可以执行某些操作(调用函数)。
当前,当您添加polyline.title
时,当您点击下面的波纹管功能时会运行,但是尽管如此或将其设置为空(“”),它都不会运行
func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
// Always allow callouts to popup when annotations are tapped.
print("ok ran?")
return true
}
但是,我一直无法找到一种使弹出窗口不可见或不显示的方法,这样我就可以在将其录音后运行一个函数。 有没有办法做到这一点?还是一般性地以可扩展的方式实现我想做的事情?
更新:
func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
// Always allow callouts to popup when annotations are tapped.
print("ok ran?")
return false
}
通过将上述返回值更改为false,似乎可以识别触摸而没有显示任何内容。 这是实现我想要的最好的方法吗? 考虑到有时候我触摸它并不能识别,这看起来并不好。
答案 0 :(得分:1)
当您点击MGLPolyline时,您正在选择它。即使您已经从false
返回了annotationCanShowCallout:
,即使在很可能没有可见提示的情况下,轻触后也会选择折线。这就是为什么您的某些水龙头没有可见动作的原因。这些分接头正在取消选择多义线(再次可见)。
您可以做的就是从false
返回annotationCanShowCallout:
(假设您不希望任何注释都带有标注),然后使用另一种委托方法来实现您想要的目标。
func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
return false
}
func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) {
print("Tapped")
mapView.deselectAnnotation(annotation, animated: false)
}
通过立即取消选择注释,您可以将每个水龙头注册为一个选择,从而消除错过的那些。