我一直在研究这个问题6个小时,我仍然在苦苦挣扎。
我有一个mapview,我正在添加这样的MKPolygons:
for (MKPolygon *polygon in arrPolygon){
[mapView addOverlay:polygon];
[mapView addAnnotation:polygon];
}
我发现了哪个多边形叠加被点击并以编程方式选择相应的注释:
WildcardGestureRecognizer *tapges=[[WildcardGestureRecognizer alloc] init];
tapges.touchesBeganCallback = ^(NSSet * touches, UIEvent * event) {
UITouch *touch = [touches anyObject];
tappedOverlay = nil;
if([touch tapCount]==1){
for (id<MKOverlay> overlay in mapView.overlays)
{
MKOverlayView *view = [mapView viewForOverlay:overlay];
if ([overlay isKindOfClass:[MKPolygon class]] && view)
{
// Get view frame rect in the mapView's coordinate system
CGRect viewFrameInMapView = [view.superview convertRect:view.frame toView:mapView];
// Get touch point in the mapView's coordinate system
CGPoint point = [touch locationInView:mapView];
// Check if touch is within the view
if (CGRectContainsPoint(viewFrameInMapView, point))
{
tappedOverlay = overlay;
[mapView selectAnnotation:tappedOverlay animated:NO];
break;
}
}
}
}
};
当我这样做时,为同一个MKAnnotationView对象调用didSelectAnnotationView和didDeselectAnnotationView。我的问题是,为什么要调用Deselect方法?
当我手动选择Annotation时,它不会调用Deselect方法,这意味着它可以正常工作。
谢谢!!!
答案 0 :(得分:1)
自己解决问题。由于Tap在叠加但在注释边界外发生,因此调用Deselect方法。我将在TouchesBegan中以编程方式选择的注释将被取消选择,因为在调用Touchesbegan方法之后调用该方法。