我希望能够判断点击是否在MKPolygon内。
我有一个MKPolygon:
CLLocationCoordinate2D points[4];
points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);
points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);
points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);
points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);
MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4];
[self.mapView addOverlay:poly];
//create UIGestureRecognizer to detect a tap
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.mapView addGestureRecognizer:tapRecognizer];
这只是科罗拉多州的基本概述。
我已经设置了水龙头到经纬度的转换:
-(IBAction)foundTap:(UITapGestureRecognizer *)recognizer
{
CGPoint point = [recognizer locationInView:self.mapView];
CLLocationCoordinate2D tapPoint = [self.mapView convertPoint:point toCoordinateFromView:self.view];
}
但我不确定如何判断我的触摸点是否在MKPolygon内部。似乎没有一种方法可以进行此检查,所以我猜想需要将MKPolygon转换为CGRect并使用CGRectContainsPoint。
MKPolygon具有.points属性,但我似乎无法将它们取出。
有什么建议吗?
编辑:
以下两个解决方案适用于iOS 6或更低版本,但在iOS 7中会出现问题。在iOS 7中,polygon.path属性始终返回NULL。Anna女士很友善地提供了另一个SO问题中的解决方案。 它涉及从多边形点创建自己的路径,以传递到CGPathContainsPoint()。
我的多边形图像:
CGPathContainsPoint(polygonView.path, NULL, polygonViewPoint, NO)
有关,现在始终返回FALSE
。 - Padin215