检查哪个视图发送gestureRecognizer

Posted

技术标签:

【中文标题】检查哪个视图发送gestureRecognizer【英文标题】:Check which view sends gestureRecognizer 【发布时间】:2014-10-16 17:56:14 【问题描述】:

这就是我想做的事情

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

    if (touch.view != self.myView) 
        NSLog(@"we went with no");
        //don't let anything that's not myView fire the gesture recognizer
        return NO;
    
    NSLog(@"we went with yes");
    return YES;

问题是代码总是选择"we went with no" 的路径,无论我实际点击哪里。如何修复我的 if 检查?

【问题讨论】:

touch.view 是触摸起源的视图,可能不是当前视图。考虑到这一点,touch.view 可以返回self.myView 的子视图吗?您是否尝试过检查 touch.view 返回的内容?如果是子视图,试试isDescendantOfView: 【参考方案1】:

如果您在特定视图之外点击时发现手势识别器动作正在触发,则应仔细检查您是否正确添加了手势识别器。

[self.myView addGestureRecognizer:[[UIGestureRecognizer alloc] initWithTarget:self action:@selector(someAction:)]];

如果您仍然遇到不正确的动作触发,您可以检查触摸位置。

if (CGRectContainsPoint(self.myView.bounds, [gesture locationInView:self.myView]))

【讨论】:

以上是关于检查哪个视图发送gestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

xcode - pageviewcontroller 覆盖gestureRecognizers

您可以将相同类型的 GestureRecognizer 添加到一个视图中吗?

是否可以将 GestureRecognizer 添加到自定义 UIView 子视图中的标签

Swift 将 GestureRecognizer 添加到 UIStackView 之上的 View

有没有办法通过 UITapGestureRecognizer 发送对象?

GestureRecognizer 开始时如何以编程方式关闭 clipsToBounds 属性?