是否可以为MGLPolyline创建自定义弹出窗口?

时间:2019-02-10 01:35:45

标签: ios swift mapbox

因此,我一直在寻找通向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,似乎可以识别触摸而没有显示任何内容。 这是实现我想要的最好的方法吗? 考虑到有时候我触摸它并不能识别,这看起来并不好。

1 个答案:

答案 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)
}

通过立即取消选择注释,您可以将每个水龙头注册为一个选择,从而消除错过的那些。