在UIScrollView中禁用2个手指滚动

时间:2011-11-21 10:54:11

标签: objective-c uiscrollview uigesturerecognizer

我想禁用UIScrollView中的双指滚动 我将其子类化并使用以下代码调整其内置手势识别器:

for (UIGestureRecognizer *mgestureRecognizer in scroller.gestureRecognizers) {     
    if ([mgestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
    {
        UIPanGestureRecognizer *mpanGR = (UIPanGestureRecognizer *) mgestureRecognizer;
        mpanGR.minimumNumberOfTouches = 1; 
        mpanGR.maximumNumberOfTouches = 1;

    }

    if ([mgestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]])
    {
        UISwipeGestureRecognizer *mswipeGR = (UISwipeGestureRecognizer *) mgestureRecognizer;
        mswipeGR.numberOfTouchesRequired = 1;
    }

出于某种原因,maximumNumberOfTouches似乎不起作用。我仍然可以用一根或两根手指滚动。如果我将这两个属性都更改为2,我可以成功禁用单指滚动并需要两次触摸。

有什么想法吗?

5 个答案:

答案 0 :(得分:19)

我意识到这是一个老线程,但我花了很长时间才弄明白这一点,所以我想我会分享。这是我禁用双指滚动的方法:

// set up a two-finger pan recognizer as a dummy to steal two-finger scrolls from the scroll view
// we initialize without a target or action because we don't want the two-finger pan to be handled
UIPanGestureRecognizer *twoFingerPan = [[UIPanGestureRecognizer alloc] init];
twoFingerPan.minimumNumberOfTouches = 2;
twoFingerPan.maximumNumberOfTouches = 2;
[scrollView addGestureRecognizer:twoFingerPan];

答案 1 :(得分:3)

如果您使用的是超过5.0的iOS SDK,也许您可​​以直接使用ui pan手势识别器。

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;

......

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1];
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1];

答案 2 :(得分:0)

我想重新打开这个问题。

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;

......

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1];
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1];

我在iOS 7和iOS 8上试过这个解决方案,在我看来,setMaximumNumberOfTouches:1没有效果。可以滚动2或3个手指。 :(

答案 3 :(得分:0)

我可以确认这仍然是iOS 8中的一个问题,但仅当UIPanGestureRecognizer是UIScrollView的基础时。使用新的UIPanGestureRecognizer创建UIView并设置其maximumNumberOfTouches属性可以按预期工作。

提交rdar:// 20890684并复制到http://openradar.appspot.com/radar?id=6191825677189120。请随意欺骗。

答案 4 :(得分:0)

<强> 问题

UIPanGestureRecognizer UIScrollView 的基础(不幸的是,这也会影响UIPageViewController maximumNumberOfTouches 的行为不符合预期 - minimumNumberOfTouches 但总是正确限制下端。

在监控这些参数时,他们似乎完成了自己的工作 - 只是UIScrollView不尊重他们而忽略了他们的价值观!

<强> REMEDY

您可以在我的答案中找到解决方案:

UIScrollView scrolling only with one finger