[英]Disable gesture recognizer only for a particular view
在一個視圖控制器上,我有一個mainView
。 在該視圖上,我有另一個視圖sidePanel
,其框架為 0,0,86,420。 我添加了一個點擊手勢識別器。 現在我只想為 mainView 而不是 sidePanelView 啟用手勢識別。 見下圖:
我想禁用 sidePanelView 的 tapGesture 並啟用除它之外的所有區域。 我怎樣才能做到這一點? (我想說的另一件事,sidePanelView 以外的區域是 sidePanelView 的 parentView)。
您應該接受 Bharat 的回答,因為那是正確的。 我只想說明你是如何做到的:
將您的視圖控制器定義為符合UIGestureRecognizerDelegate
,例如:
@interface ViewController () <UIGestureRecognizerDelegate> // the rest of your interface @end
請確保您設置的delegate
的姿態:
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMainTap:)]; gesture.delegate = self; [self.view addGestureRecognizer:gesture];
然后檢查有問題的視圖是否發生觸摸:
- (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.