Ios 同时调用取消选择方法的Mapview的selectAnnotation方法

Ios 同时调用取消选择方法的Mapview的selectAnnotation方法,ios,mkmapview,mkannotation,Ios,Mkmapview,Mkannotation,我已经在这个问题上工作了6个小时,我仍然在努力 我有一个地图视图,我正在添加如下多边形: for (MKPolygon *polygon in arrPolygon){ [mapView addOverlay:polygon]; [mapView addAnnotation:polygon]; } 我正在查找点击的多边形覆盖,并通过编程选择相应的注释: WildcardGestureRecognizer *tapges=[[WildcardGestureRecognizer a

我已经在这个问题上工作了6个小时,我仍然在努力

我有一个地图视图,我正在添加如下多边形:

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;
            }
        }
    }
    }
};
WildcardGestureRecognizer*tapges=[[WildcardGestureRecognizer alloc]init];
tapges.touchesbeagancallback=^(NSSet*touchs,UIEvent*event){
UITouch*touch=[触摸任何对象];
tappedOverlay=零;
如果([touch tapCount]==1){
用于(mapView.overlays中的id覆盖)
{
MKOverlayView*视图=[mapView视图ForOverlay:overlay];
if([overlay iskindof类:[MKPolygon类]]&&view)
{
//获取地图视图坐标系中的图幅矩形
CGRect VIEWFRAMENMPVIEW=[view.superview CONVERTRCT:view.frame TO view:mapView];
//获取mapView坐标系中的接触点
CGPoint point=[触摸位置视图:地图视图];
//检查触摸是否在视图内
if(CGRectContainsPoint(ViewFrameinMPView,point))
{
tappedOverlay=覆盖层;
[地图视图选择注释:点击播放动画:否];
打破
}
}
}
}
};
执行此操作时,将为同一MKAnnotationView对象调用didSelectAnnotationView和didSelectAnnotationView。我的问题是,为什么要调用取消选择方法

当我手动选择Annotation时,它不会调用Deselect方法,这意味着它可以正常工作


谢谢你

我自己找到了解决办法。由于轻触发生在覆盖上,但在注释边界之外,所以会调用“取消选择”方法。我在TouchesBegind中以编程方式选择的注释将被取消选择,因为该方法在调用TouchesBegind方法后被调用。

我自己得到了解决方案。由于轻触发生在覆盖上,但在注释边界之外,所以会调用“取消选择”方法。我在TouchesStart中以编程方式选择的注释将被取消选择,因为该方法是在调用TouchesStart方法之后调用的。

您能否进一步阐述您的解决方案。使用一些代码来说明您的解决方案将非常有帮助:)我的团队遇到了相同的问题,我们仍然不知道如何解决该问题。当以编程方式调用selectAnnotation method时,如果在批注视图边界外发生触摸或轻触,将调用取消选择(因为点击发生在外部,mapview将在调用触摸开始方法后调用取消选择)。因此,我们必须再次调用所需注释的selectAnnotation。在DiddeSelectAnotattion方法中,添加以下代码:if(view.annotation!=tappedOverlay){[mapview selectAnnotation:tappedOverlay animated:NO];}您能否进一步阐述您的解决方案。使用一些代码来说明您的解决方案将非常有帮助:)我的团队遇到了相同的问题,我们仍然不知道如何解决该问题。当以编程方式调用selectAnnotation方法时,如果在注释视图边界外发生触摸或点击,将调用取消选择(因为点击发生在外部,mapview将在调用触摸开始方法后调用取消选择)。因此,我们必须再次调用所需注释的selectAnnotation。在DiddeSelectAnotattion方法中,添加以下代码:if(view.annotation!=tappedOverlay){[mapview selectAnnotation:tappedOverlay animated:NO];}