UITapGestureRecognizer 和 touchesBegan 用于相同的视图

Posted

技术标签:

【中文标题】UITapGestureRecognizer 和 touchesBegan 用于相同的视图【英文标题】:UITapGestureRecognizer and touchesBegan for same view 【发布时间】:2014-12-01 06:15:53 【问题描述】:

我想在视图中有UITapGestureRecognizer,在其子视图中有touchesBegan,但问题是当UITapGestureRecognizer 被识别时touchesBegan 未被调用。

这样做好吗?还是我需要采取其他方法?

编辑:已解决。设置 UITapGestureRecognizer 的 cancelsTouchesInView 属性对我有用。默认为 false,因此不会调用 touchesBegan

【问题讨论】:

不,我认为这是不可能的,因为首先调用 touchesBegan,然后调用 touchesMoved,然后调用 tochCancel 或 end,因此当触摸结束调用时它无法识别手势。实际上为什么需要调用函数? @BHASKAR ok 将修改策略 【参考方案1】:

请找出你错在哪里, 这是关于如何在课堂上实现手势识别器的分步指南:

    使您的班级符合UIGestureRecognizerDelegate 协议。

    实例化手势识别器。例如,要实例化一个UITapGestureRecognizer,我们将这样做:

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
    

    这里,action 是处理手势的选择器。在这里,我们的选择器 handleTapFrom 看起来像:

    - (void) handleTapFrom: (UITapGestureRecognizer *)recognizer
    
        //Code to handle the gesture
    
    

    选择器的参数是手势识别器。我们可以使用这个手势识别器来访问它的属性,例如,我们可以找到手势识别器的状态,比如UIGestureRecognizerStateBeganUIGestureRecognizerStateEnded等。

    在实例化的手势识别器上设置所需的属性。例如,对于UITapGestureRecognizer,我们可以设置属性numberOfTapsRequirednumberOfTouchesRequired

    将手势识别器添加到要检测手势的视图中。在我们的示例代码中(我将分享该代码供您参考),我们将使用以下代码行将手势识别器添加到 imageView:

    [self.imageView addGestureRecognizer:tapGestureRecognizer];
    

    将手势识别器添加到视图后,设置手势识别器的委托,即处理所有手势识别器内容的类。在我们的示例代码中,它会是这样的:

    tapGestureRecognizer.delegate = self;
    

    注意:在将手势识别器添加到视图后分配委托。否则不会调用action方法。

【讨论】:

以上是关于UITapGestureRecognizer 和 touchesBegan 用于相同的视图的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 和 touchesBegan 用于相同的视图

UIWebView 上的 UIScrollView 和 UITapGestureRecognizer 冲突

UITapGestureRecognizer 和自动校正

UITapGestureRecognizer 和 addTarget 的区别

NSString 和 UITapGestureRecognizer 作为方法参数

UILongPressGestureRecognizer 和 UITapGestureRecognizer