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

标签 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
    }

通过将上面的 return 更改为 false,它似乎可以识别触摸而不显示任何内容。 这是实现我想要的效果的最佳方式吗?考虑到有时当我触摸它时它无法识别,这似乎不太好。

最佳答案

当您点击 MGLPolyline 时,您就选择了它。即使您从 annotationCanShowCallout: 返回了 false,点击后也会选择折线,即使可能没有可见的提示。这就是为什么您的某些点击没有明显的 Action 。这些点击将取消选择折线(再次不可见)。

您可以做的是从 annotationCanShowCallout: 返回 false (假设您不希望任何注释有标注)并使用另一个委托(delegate)方法来实现您想要的目标。

func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
    return false
}

func mapView(_ mapView: MGLMapView, didSelect annotation: MGLAnnotation) {
    print("Tapped")
    mapView.deselectAnnotation(annotation, animated: false)
}

通过立即取消选择注释,您可以将每次点击注册为选择,从而消除错过的点击。

关于ios - 是否可以为 MGLPolyline 创建自定义弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612568/

相关文章:

ios - 从 iPhone 中的字符串中获取子字符串

ios - 如何禁用移动基板调整中的 Hook

swift - 从iOS Swift项目调用用于REST的端点Google APIs Objective-C客户端库

ios - MapBox 导致由于内存问题而终止

ios - SwiftUI:如何在容器 View 中垂直和水平居中并在其下放置一些东西

ios - 图像未从 CGImageCreateWithImageInRect 显示

ios - 将按钮放在屏幕的左下角

ios - 如何使用点击手势 (iOS8/Swift) 在 pageViewController 上显示/隐藏状态栏

javascript - 带有自定义标签的 Mapbox GL Popup 设置内容

javascript - 带标记映射到 png