इसे How to intercept touches events on a MKMapView or UIWebView objects? और How to determine if an annotation is inside of MKPolygonView (iOS) के संयोजन से हल किया जा सकता है। viewWillAppear में इस जोड़ें:
WildcardGestureRecognizer * tapInterceptor = [[WildcardGestureRecognizer alloc] init];
tapInterceptor.touchesBeganCallback = ^(NSSet * touches, UIEvent * event) {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.mapView];
CLLocationCoordinate2D coord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
MKMapPoint mapPoint = MKMapPointForCoordinate(coord);
for (id overlay in self.mapView.overlays)
{
if ([overlay isKindOfClass:[MKPolygon class]])
{
MKPolygon *poly = (MKPolygon*) overlay;
id view = [self.mapView viewForOverlay:poly];
if ([view isKindOfClass:[MKPolygonView class]])
{
MKPolygonView *polyView = (MKPolygonView*) view;
CGPoint polygonViewPoint = [polyView pointForMapPoint:mapPoint];
BOOL mapCoordinateIsInPolygon = CGPathContainsPoint(polyView.path, NULL, polygonViewPoint, NO);
if (mapCoordinateIsInPolygon) {
debug(@"hit!")
} else {
debug(@"miss!");
}
}
}
}
};
[self.mapView addGestureRecognizer:tapInterceptor];
WildcardGestureRecognizer
पहले जुड़ा हुआ जवाब में है। mapView:viewForOverlay:
पर कॉल करना सस्ता नहीं होगा, जिससे स्थानीय कैश मदद मिलेगी।
शानदार। यह वही कोड है जिसे मैं ओवरले पर टैप करते समय पता लगाने के लिए खोज रहा था। हालांकि मैंने इसे एक टैप इशारा पहचानकर्ता नामक विधि के अंदर रखा। कस्टम इंटरसेप्टर बनाने के बिना बस ठीक काम करता है। – drekka
यह आईओएस 7 पर काम करना बंद कर दिया! जहां polyView.path हमेशा शून्य है! – Bach
MKPolygonView को MKPolygonRenderer के साथ बदलें - पूर्व को आईओएस 7 में बहिष्कृत किया गया था – guyh92