gpt4 book ai didi

swift - MKPolyline 标注

转载 作者:行者123 更新时间:2023-11-28 11:34:54 26 4
gpt4 key购买 nike

我有一条短线 (MKPolyline) 和一个自定义注释类 (MKPointAnnotaion)。现在我的点注释位于多段线的中点。但是,我希望每当触摸多段线上的任何点时都显示标注,类似于路由在 map 中的执行方式。由于折线似乎没有像注释那样的可触摸属性,有没有办法让注释包含整条线?

我不关心注释标记(它实际上很麻烦,我宁愿隐藏它),只关心标注和相关的类信息。

如果可能的话,有人可以提供带有答案的简短示例代码吗?

编辑:其他帖子似乎是 5 年多以前的,链接不再有效

最佳答案

几个想法:

  1. 我认为您希望此标注从何处开始的“添加注释”方法将是最简单的方法。如果您开始考虑创建一个显示路径的注释 View 子类,我认为这很快就会变得非常棘手(处理缩放变化、旋转、3D 等)。叠加层免费为您提供一系列行为,所以我认为您会想要坚持下去。注释也免费为您提供标注行为,所以我认为您也会希望继续使用它。

  2. 如果您不希望您的注释 View 显示图钉/标记,请不要从 MKPinAnnotationViewMKMarkerAnnotationView 继承,而是使用MKAnnotationView.

  3. 棘手的步骤是如何检测 MKPolylineRenderer 上的点击。一个想法是创建一个跟踪 MKPolyline 路径轮廓的路径。

    extension MKPolyline {
    func contains(point: CGPoint, strokeWidth: CGFloat = 44, in mapView: MKMapView) -> Bool {
    guard pointCount > 1 else { return false }

    let path = UIBezierPath()
    path.move(to: mapView.convert(from: points()[0]))
    for i in 1 ..< pointCount {
    path.addLine(to: mapView.convert(from: points()[i]))
    }
    let outline = path.cgPath.copy(strokingWithWidth: strokeWidth, lineCap: .round, lineJoin: .round, miterLimit: 0)
    return outline.contains(point)
    }
    }

    在哪里

    extension MKMapView {
    func convert(from mapPoint: MKMapPoint) -> CGPoint {
    return convert(mapPoint.coordinate, toPointTo: self)
    }
    }

然后您可以创建一个手势识别器来检测点击,检查它是否在勾勒出 MKPolyline 轮廓的路径内,或其他任何内容。但这些是解决方案的基本部分。

显然,answers here轮廓不同,显然是在看距离的路径。可以想象,这也会奏效。

关于swift - MKPolyline 标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55731342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com