MKPolyline的标注

问题描述 投票:0回答:1

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

我不关心注释标记(它实际上是一个令人讨厌的东西,并且宁愿隐藏它),只关注标注和相关的类信息。

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

编辑:其他帖子似乎是从5年多以前的链接不再工作

swift mapkit
1个回答
2
投票

几点想法:

  1. 我认为你希望这个标注从哪里开始的“添加注释”方法将是最简单的方法。如果你开始考虑制作一个显示路径的注释视图子类,我认为它会很快变得非常毛茸茸(处理缩放变化,旋转,3D等)。叠加为您提供免费的一系列行为,所以我认为您会坚持这一点。并且注释也会免费为您提供标注行为,所以我认为您也希望保持这种行为。
  2. 如果您不希望注释视图显示引脚/标记,则不要从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轮廓不同,显然看着路径的距离。可以想象也可以。

© www.soinside.com 2019 - 2024. All rights reserved.