iPhone-手势识别器互相攻击

iPhone-手势识别器互相攻击,iphone,ios,Iphone,Ios,我在视图中添加了两个手势识别器。一个将处理视图拖动,另一个将处理双击。差不多 UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(deleteThisView)]; [doubleTap setDelegate:self]; [doubleTap setCancelsTouchesInView:YES]; [doubl

我在视图中添加了两个手势识别器。一个将处理视图拖动,另一个将处理双击。差不多

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不会将其识别为双击,而是将其视为两次移动,拖动方法将运行两次

我不知道如何才能做到这一点。有什么线索吗


谢谢

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

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

也许你可以试试这样的方法。

下面是流浪汉用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(我最初忘记了这一点)