2015-07-03 57 views
0

在我的mapview中,我使用长按手势在地图上绘制MKCircle。我想使用双击手势来移除该圈子。我将双击作为一个手势识别器并且它可以正常工作,但是,当它移除该圆时,它也会每次放大一点。我想知道是否有一种方法可以通过双击行为来移除默认缩放,只留下我自己的行为?我不想在双击时禁用整个地图的缩放。MapView - Disable Doubletap Zoom

UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(getMapCoordinateFromTouch:)]; 
    [self.mapView addGestureRecognizer:longGesture ]; 

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(removeBoundary:)]; 
    [tapGesture setNumberOfTapsRequired:2]; 
    [tapGesture setNumberOfTouchesRequired:1]; 
    tapGesture.delegate = self; 
    [self.mapView addGestureRecognizer:tapGesture]; 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

-(void)removeBoundary:(UITapGestureRecognizer *)gesture 
{ 
    [self.mapView removeOverlays:self.mapView.overlays]; 
} 

附加信息:

有人提出这个问题是相似的:Disable double tap zoom in MKMapView (iOS 6)

然而,这个人试图禁用所有双水龙头,而不只是默认行为。我确实在这个问题中找到了一些我认为可能会帮助的代码,但事实并非如此。在那个线程中,它表明你可以遍历mapview并移除手势识别器。这似乎适用于我可能添加的手势识别器,但它没有找到任何Apple默认行为。我在viewWillAppear(我也试过viewDidAppear)后运行下面的代码,但是一个断点表明“手势”是零。所以出于某种原因,该视图没有Apple的默认手势。

NSArray *gestures = [self.mapView gestureRecognizers]; 
    for (UIGestureRecognizer *recognizer in gestures) 
    { 
     if ([recognizer isKindOfClass:[UITapGestureRecognizer class]]) 
     { 
      UITapGestureRecognizer *tap = (UITapGestureRecognizer *)recognizer; 
      if (tap.numberOfTapsRequired == 2) 
       [self.mapView removeGestureRecognizer:recognizer]; 
     } 
    } 
+0

可能重复的[停用双抽头放大MKMapView(iOS 6)](http://stackoverflow.com/questions/12521017/disable-double-tap-zoom-in-mkmapview-ios-6) –

+0

我解释为什么问题是不同于链接的版本。 – C6Silver

回答

0

尝试从-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:返回NO。这听起来像你的识别器和地图视图的识别器都在双击上。你真的希望你的手势第一次破解,所以它可以有效地覆盖地图视图。

+0

我确实尝试过,但它实际上阻止我的射击,同时保持默认行为, – C6Silver

+0

也许你最好的选择就是将'zoomEnabled'设置为'NO',然后添加你自己的捏和点击识别器来调整缩放。如果它可以工作,那么它可以让您控制双击变焦的时间以及不变的时间。 – Caleb

+0

这可能会起作用,但重新创建地图所​​有行为只是为了消除双击,似乎有很多工作要做。我希望有更多的手术方式来消除默认的双击行为。 – C6Silver

0

默认UIGestureRecognizers出现要被添加到所述第一子视图,只是除去它们:

实施例以除去所有UITapGestureRecognizers(去13〜9)的

print("GestureRecognizers before \(mainMap.subviews[0].gestureRecognizers?.count)") if (mainMap.subviews[0].gestureRecognizers != nil){ for gesture in mainMap.subviews[0].gestureRecognizers!{ if (gesture.isKindOfClass(UITapGestureRecognizer)){ mainMap.subviews[0].removeGestureRecognizer(gesture) } } } print("GestureRecognizers after \(mainMap.subviews[0].gestureRecognizers?.count)")