簡體   English   中英

僅針對特定視圖禁用手勢識別器

[英]Disable gesture recognizer only for a particular view

在一個視圖控制器上,我有一個mainView 在該視圖上,我有另一個視圖sidePanel ,其框架為 0,0,86,420。 我添加了一個點擊手勢識別器。 現在我只想為 mainView 而不是 sidePanelView 啟用手勢識別。 見下圖:

左視圖越過底視圖

我想禁用 sidePanelView 的 tapGesture 並啟用除它之外的所有區域。 我怎樣才能做到這一點? (我想說的另一件事,sidePanelView 以外的區域是 sidePanelView 的 parentView)。

您應該接受 Bharat 的回答,因為那是正確的。 我只想說明你是如何做到的:

  1. 將您的視圖控制器定義為符合UIGestureRecognizerDelegate ,例如:

     @interface ViewController () <UIGestureRecognizerDelegate> // the rest of your interface @end
  2. 請確保您設置的delegate的姿態:

     UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMainTap:)]; gesture.delegate = self; [self.view addGestureRecognizer:gesture];
  3. 然后檢查有問題的視圖是否發生觸摸:

     - (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if (CGRectContainsPoint(self.menuView.bounds, [touch locationInView:self.menuView])) return NO; return YES; }

您可以使用 UIGestureRecognizerDelegate 中的gestureRecognizer:shouldReceiveTouch: 方法查看觸摸發生的位置並決定是否要響應手勢。 如果觸摸太靠近視圖的邊緣(您想要禁用的位置),則返回 NO,否則返回 YES。 或者簡單地檢查 touch.view 以查看觸摸是否發生在您的 UIImageView 上。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
   shouldReceiveTouch:(UITouch *)touch;

斯威夫特 3 版本:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    if theView.bounds.contains(touch.location(in: theView)) {
        return false
    }
    return true
}

遇到了類似的問題; 最終使用了@Rob 的答案。 這是一個 Swift 版本:

extension ViewController: UIGestureRecognizerDelegate {
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
        return !CGRectContainsPoint(menuView.bounds, touch.locationInView(menuView))
    }
}

如果要為特定視圖禁用UITapGestureRecognizer ,只需刪除 userInteraction。

前任

sidePanel.userInteractionEnabled = NO;

我已經做到了這一點,在幫助下

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

並且我已經檢查了接觸點位置並根據接觸位置我做了我這樣的工作

if(points.x>86)
    {//hide the side panel
     }

它識別與事件同步的手勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM