2011-09-07 66 views
1

我在几张卡片式视图上使用UIPanGestureRecognizer,以让用户移动屏幕周围的视图。他们可以一次放下3根手指和3张卡,这是非常好的,然而,我的一些功能并不是按照这种方式工作的。如何防止同时使用UIGestureRecognizers

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

我认为:

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

谢谢。

+0

添加一个全局手势识别器并检查点击了哪个图像。 – Nekto

回答

2

最佳做法是使用一个(全局)手势识别器来查看您的卡片的超级视图,使用hitTest:来确定哪张卡片已被触摸。它将允许您正确使用多个触摸。

1

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

编辑:顺便说一句,你保留伊娃的想法虽然笨拙,但仍然有效。 UIGestureRecognizer是UIKit的一部分,只能在主线程上运行,所以您不必担心多线程访问。但就像我说的那样,这很笨拙。使用一个“主”UIGestureRecognizer反而更清洁。

+0

感谢您回复我的想法,我同意这将是笨拙的,所以我要与超级视图解决方案。 – brianpartridge