iOS在滑动时禁用平移

时间:2014-07-24 02:55:41

标签: ios swipe uipangesturerecognizer uiswipegesturerecognizer pan

我想在滑动时禁用平移手势,如果我平移则禁用滑动,但我最终激活了无论是平移还是滑动。我有什么不妥之处吗?

#pragma mark - UIGestureRecognizerDelegate methods
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if ([otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
    [otherGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];

    NSLog(@"added failure requirement to: %@", otherGestureRecognizer);
}

if ([gestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]) {
    [[BTHomeViewController sharedInstance].revealViewController.panGestureRecognizer requireGestureRecognizerToFail:gestureRecognizer];
}

if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
    [left requireGestureRecognizerToFail:[BTHomeViewController sharedInstance].revealViewController.panGestureRecognizer];
    [right requireGestureRecognizerToFail:[BTHomeViewController sharedInstance].revealViewController.panGestureRecognizer];
}

  return YES;
}

3 个答案:

答案 0 :(得分:3)

这两个手势很难结合起来。问题是你通常希望平移手势立即执行(它会这样做),但是滑动手势需要一点时间才能被识别,因为用户必须将手指拖动一些路径。

无论如何,您通常可以考虑两个程序:

首先是让两个手势同时识别(你已经做过)。您需要添加的是当识别滑动手势时,只需删除平移手势调用。要做到这一点,你需要做的只是panGesture.enabled = NO; panGesture.enabled = YES;这两行简单地一个接一个地调用,手势不会触发,直到另一个触摸开始。

其次是等待查看是否会识别滑动。要做到这一点,最简单的方法是用长按手势替换平移手势。请注意,长按手势的作用与平移手势完全相同,但您可以将其设置为适当的minimumPressDuration(您希望识别滑动的持续时间)和适当的allowableMovement。你的情况。

答案 1 :(得分:0)

我遇到了同样的问题。

我使用UIGestureRecognizerDelegate玩了很多但没有运气。

我所做的是决定什么时候播放" pan"应被视为"刷卡"基于速度和手势完成。因此,如果用户开始平移并且速度小于某个值,请继续,如果用户快速平移并完成手势,则触发"轻扫"。

这符合我的业务需求。希望它有所帮助。

答案 2 :(得分:0)

通过手势创建关系以实现:

panGesture.require(toFail: swipeGesture)