将多个UITapGestureRecognizers添加到单个视图(Cocos2d)

时间:2012-07-07 22:24:06

标签: uiview cocos2d-iphone uitapgesturerecognizer

我在onEnter方法中添加以下代码。

doubleTapRecognizer_ = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    doubleTapRecognizer_.numberOfTapsRequired = 2;
    doubleTapRecognizer_.cancelsTouchesInView = NO;
    [[[CCDirector sharedDirector] view] addGestureRecognizer:doubleTapRecognizer_];

我有这个类的多个实例,但唯一一个获取它的选择器的实例是添加的最后一个实例。 UIView Class Reference让我相信可以在单个视图中添加多个UIGestureRecognizer。属性“gestureRecognizers”返回NSArray。

实际上我已经有一个UIPanGestureRecognizer使用来自另一个类的相同视图。所以我得到至少两个UIGestureRecognizer一次工作。

2 个答案:

答案 0 :(得分:14)

您可以在同一视图中添加多个手势识别器。您不能(轻松)做的是将相同手势识别器类型的多个实例(平移,滑动,双击等)添加到同一视图。

为什么?

因为只要第一个手势识别器识别出手势(在这种情况下双击),它就会取消所有触摸事件。因此,剩余的手势识别器永远不会完成识别,并且永远不会发射它们的事件。

您不需要多个相同类型的手势识别器。在您的情况下,一旦您收到双击事件,您可以通过双击来发出正确的对象信号。使用识别器的位置和其他属性来查找,例如,双击的精灵,然后让它做它需要做的任何事情。

由于这个原因,让场景层次结构中的更高级别节点(即UI层)识别手势是好的设计,然后将事件传递给相应的节点,或者只是忽略它。

答案 1 :(得分:5)

为了在同一个视图中添加多个UIGestureRecognizer,您需要设置添加到视图中的手势识别器的delegate属性,并在委托中实现以下方法: / p>

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

通过上面的方式,无论手势识别器是否属于同一类型,您都可以在同一视图上添加多个手势识别器。

例如,您可以将两个UITapGestureRecognizer添加到同一视图中,并且将调用两个轻击手势识别器的回调。最后添加的回调将首先被调用。

希望这有帮助。

相关问题