如果轻拍手势在叠加多边形中,我一直试图解决这个问题。
我正在尝试制作国家/地区覆盖图 - 在点击叠加层时我希望能够告诉叠加层的国家/地区。
首先我发现了这个:Detecting touches on MKOverlay in iOS7 (MKOverlayRenderer)而且:detect if a point is inside a MKPolygon overlay建议:
```
//point clicked
let point = MKMapPointForCoordinate(newCoordinates)
//make a rectangle around this click
let mapRect = MKMapRectMake(point.x, point.y, 0,0);
//loop through the polygons on the map and
for polygon in worldMap.overlays as! [MKPolygon] {
if polygon.intersectsMapRect(mapRect) {
print("found intersection")
}
}
```
viewForOverlay
具有良好的发声功能CGPathContainsPoint
,但现在不推荐使用viewForOverlay
。这导致我找到了Detecting a point in a MKPolygon broke with iOS7 (CGPathContainsPoint),它提出了以下方法:
viewForOverlay
),然后如果点击的点位于叠加层中,则使用CGPathContainsPoint
返回。
但是,我无法使此代码正常工作。```
func overlaySelected (gestureRecognizer: UIGestureRecognizer) {
let pointTapped = gestureRecognizer.locationInView(worldMap)
let newCoordinates = worldMap.convertPoint(pointTapped, toCoordinateFromView: worldMap)
let mapPointAsCGP = CGPointMake(CGFloat(newCoordinates.latitude), CGFloat(newCoordinates.longitude));
print(mapPointAsCGP.x, mapPointAsCGP.y)
for overlay: MKOverlay in worldMap.overlays {
if (overlay is MKPolygon) {
let polygon: MKPolygon = (overlay as! MKPolygon)
let mpr: CGMutablePathRef = CGPathCreateMutable()
for p in 0..<polygon.pointCount {
let mp = polygon.points()[p]
print(polygon.coordinate)
if p == 0 {
CGPathMoveToPoint(mpr, nil, CGFloat(mp.x), CGFloat(mp.y))
}
else {
CGPathAddLineToPoint(mpr, nil, CGFloat(mp.x), CGFloat(mp.y))
}
}
if CGPathContainsPoint(mpr, nil, mapPointAsCGP, false) {
print("------ is inside! ------")
}
}
}
}
```
第一种方法有效,但无论我尝试多少小,并在点击点let mapRect = MKMapRectMake(point.x, point.y, 0.00000000001,0.00000000001);
周围设置矩形的高度和宽度,水龙头的准确性都不可靠,因此您最终可以点击几个多边形马上。
目前,我正在努力通过使用&#39; MKPolygon&#39;来决定哪个县更接近水龙头? property coordinate
- 它给出了多边形的中心点。然后,可以测量从该多边形到分接点的距离,以找到最接近的一个。但这并不理想,因为用户可能永远无法点击他们想要的国家。
所以,总结一下我的问题:
CGPathContainsPoint
)中是否有正确实现的内容?