タップが 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
。アンナさんは、ここで別の SO の質問で解決策を提供してくれました。に渡すポリゴン ポイントから独自のパスを作成する必要がありますCGPathContainsPoint()
。
私のポリゴンの画像: