如何用 UIGestureRecognizer 替换 TouchesBegan

Posted

技术标签:

【中文标题】如何用 UIGestureRecognizer 替换 TouchesBegan【英文标题】:How to replace TouchesBegan with UIGestureRecognizer 【发布时间】:2011-07-08 17:27:08 【问题描述】:

问题来了: 我想在我的应用程序中使用 UIGestureRecognizer。 出于这个原因,我想从我的观点中放弃 TouchBegan/TouchEnded 事件。

但是我不明白如何使用 UIGestureRecognizers 管理触摸开始的时间(用户将手指放在屏幕上)。

最简单的一个是 UITapGestureRecognizer 但相关的选择器只有在 TapGesture 完成时才会被触发(嗯......当然这完全有意义)。但问题仍然存在:如何停止使用 touchesBegan 并从 UIGestureRecognizer 获取该事件?

谢谢!

【问题讨论】:

【参考方案1】:

这是一个例子:

 //Pan gesture
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouches = 3; //number of fingers
recognizer.delegate = self;
[self.view addGestureRecognizer:recognizer];

[recognizer release];

- (void)handlePan:(UIPanGestureRecognizer *)recognizer 

   if (recognizer.state == UIGestureRecognizerStateBegan)
   
    //do something
    else if (recognizer.state == UIGestureRecognizerStateEnded) 
   
    //do something 
   

还在 .h 文件中实现 UIGestureRecognizerDelegate。根据您使用的视图,您可能需要执行 self.view.userInteractionEnabled = YES 。例如,如果是 UIImageView,则需要设置 userInteractionEnabled = YES,默认为 NO

【讨论】:

【参考方案2】:

对于你正在尝试的东西,你做不到。手势识别器用于高级手势,因此它们在所有应用程序中的行为相同(例如滑动、双击所需的时间等)。对于低级控制和识别器不能做的事情,你仍然需要在 touchesbegan、touchesEnded 等中实现逻辑。

【讨论】:

这个响应是完全错误的,用下面的 UIGestureRecognizerStateBegan 检查响应。【参考方案3】:

为什么不在 UIGestureRecognizer 子类中实现您自己的 touchesBegan —— 拦截消息,提取您想要的信息,然后将消息传递给 super 的 touchesBegan?

【讨论】:

以上是关于如何用 UIGestureRecognizer 替换 TouchesBegan的主要内容,如果未能解决你的问题,请参考以下文章

如何用批处理替换文本内容?

Delphi 如何用多线程进行数据采集

如何使用iOS手势UIGestureRecognizer

MySQL命令,一篇文章替你全部搞定

UIGestureRecognizer

点击按钮时取消 UIGestureRecognizer?