我有一个短线(MKPolyline)和一个自定义注释类(MKPointAnnotaion)。现在我的点注释位于折线的中点。但是,我希望每当触摸折线上的任何点时都会显示标注,类似于路线在地图中的执行方式。由于折线似乎没有像注释那样的可触摸属性,有没有办法让注释包含整行?
我不关心注释标记(它实际上是一个令人讨厌的东西,并且宁愿隐藏它),只关注标注和相关的类信息。
如果可能的话,有人可以提供简短的示例代码和答案吗?
编辑:其他帖子似乎是从5年多以前的链接不再工作
几点想法:
MKPinAnnotationView
或MKMarkerAnnotationView
继承,而只需使用MKAnnotationView
。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轮廓不同,显然看着路径的距离。可以想象也可以。