11

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

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

我有这个类的多个实例,但唯一一个调用它的选择器是添加的最后一个实例。UIView类参考让我相信可以将多个 UIGestureRecognizer 添加到单个视图中。属性“gestureRecognizers”返回一个 NSArray。

事实上,我已经有一个 UIPanGestureRecognizer 使用另一个类的相同视图。所以我至少有两个 UIGestureRecognizers 可以同时工作。

4

2 回答 2

16

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

为什么?

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

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

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

于 2012-07-08T11:58:11.813 回答
9

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

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

通过上述方式,您可以将多个手势识别器添加到同一个视图中,无论手势识别器是否属于同一类型。

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

希望这可以帮助。

于 2017-03-06T08:41:23.400 回答