iPhone - 手势识别器相互冲突

3
我已经给一个视图添加了两个手势识别器。其中一个用于处理视图拖动,另一个用于双击操作。就像这样:
UITapGestureRecognizer *doubleTap =
  [[UITapGestureRecognizer alloc] initWithTarget:self 
        action:@selector(deleteThisView)];
[doubleTap setDelegate:self];
[doubleTap setCancelsTouchesInView:YES];
[doubleTap setNumberOfTapsRequired:1];
[base addGestureRecognizer:doubleTap];
[doubleTap release];

UIPanGestureRecognizer *panGesture = nil;
panGesture = [[UIPanGestureRecognizer alloc] 
                  initWithTarget:self action:@selector(drag:)];
[panGesture setMaximumNumberOfTouches:1];
[panGesture setDelegate:self];
[base addGestureRecognizer:panGesture];
[panGesture release];

问题是这样的:由于视图可以移动,所以双击有点难以实现,因为视图可能会稍微滑动一侧或另一侧,iOS 将不会将其识别为双击,而是将其视为两次移动,拖动方法将运行两次。
我不知道该怎么做。有什么线索吗?
谢谢。
2个回答

9

有一个委托方法可以告诉中央手势代码,可能会同时使用两个识别器:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (gestureRecognizer==_panRecognizer && otherGestureRecognizer==_swipeRecognizer)
        return YES;
    if (gestureRecognizer==_swipeRecognizer && otherGestureRecognizer==_panRecognizer)
        return YES;
    return NO;
}

也许你可以尝试类似的东西。

我如何使得只有一个手势在同一时间执行。我遇到了麻烦。 - Rahul Vyas

1

以下是Vagrant在Swift中的答案:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer == panRecognizer && otherGestureRecognizer == swipeRecognizer {
        return true
    }
    if gestureRecognizer == swipeRecognizer && otherGestureRecognizer == panRecognizer {
        return true
    }
    return false
}

不要忘记实现委托协议并将手势的代理设置为self(我最初忘记了这一点)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接