2015-07-03 58 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)")