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
选择器的参数是手势识别器。我们可以使用这个手势识别器来访问它的属性,例如,我们可以找到手势识别器的状态,比如UIGestureRecognizerStateBegan
、UIGestureRecognizerStateEnded
等。
在实例化的手势识别器上设置所需的属性。例如,对于UITapGestureRecognizer
,我们可以设置属性numberOfTapsRequired
和numberOfTouchesRequired
。
将手势识别器添加到要检测手势的视图中。在我们的示例代码中(我将分享该代码供您参考),我们将使用以下代码行将手势识别器添加到 imageView:
[self.imageView addGestureRecognizer:tapGestureRecognizer];
将手势识别器添加到视图后,设置手势识别器的委托,即处理所有手势识别器内容的类。在我们的示例代码中,它会是这样的:
tapGestureRecognizer.delegate = self;
注意:在将手势识别器添加到视图后分配委托。否则不会调用action方法。
【讨论】:
以上是关于UITapGestureRecognizer 和 touchesBegan 用于相同的视图的主要内容,如果未能解决你的问题,请参考以下文章
UITapGestureRecognizer 和 touchesBegan 用于相同的视图
UIWebView 上的 UIScrollView 和 UITapGestureRecognizer 冲突
UITapGestureRecognizer 和 addTarget 的区别