Ios 同时调用取消选择方法的Mapview的selectAnnotation方法
我已经在这个问题上工作了6个小时,我仍然在努力 我有一个地图视图,我正在添加如下多边形: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
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];}