如何防止同时发生UIGestureRecognizer

时间:2011-09-07 19:44:01

标签: iphone ios uigesturerecognizer

我在几个类似卡片的视图上使用UIPanGestureRecognizer让用户移动屏幕周围的视图。非常好的是他们可以放下3个手指并同时拾取3张卡片,但是,我的一些功能并不像那样工作。

我想一次只允许1个手势识别器运行。有没有一种首选的方法呢?

我考虑过:

  • gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:但默认情况下它已经返回“NO”。
  • 在第一个手势开始时设置一个实例变量,但是我担心这个变量的多线程访问(我应该使用@synchronized,还是会有太大的开销?)。
  • 保持手势识别器的数组并在gestureRecognizerShouldBegin中检查其状态:以确保没有任何正在进行中。

感谢。

2 个答案:

答案 0 :(得分:2)

最佳做法是使用一个(全局)手势识别器,因为它是hitTest:卡片的超级视图,用于确定触摸了哪张卡片。它将允许您正确地处理多个触摸。

答案 1 :(得分:1)

将单个UIPanGestureRecognizer放在所有卡片的公共超级视图上,然后点击检测以在手势开始时找到有问题的卡片。这样你只有一个手势识别器,所以一次只能运行一个手势。

编辑:顺便说一句,你保持一个伊娃的想法,虽然笨拙,但会有效。 UIGestureRecognizer是UIKit的一部分,只在主线程上运行,因此您不必担心多线程访问。但就像我说的那样,它很笨拙。使用单个“主”UIGestureRecognizer更清晰。