【问题标题】:Disable 2 finger scrolling in UIScrollView在 UIScrollView 中禁用 2 指滚动
【发布时间】:2011-11-21 10:54:11
【问题描述】:

我想在我的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,我可以成功禁用单指滚动并需要两次触摸。

有什么想法吗?

【问题讨论】:

    标签: objective-c uiscrollview uigesturerecognizer


    【解决方案1】:

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

    // 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 的最小值和最大值吗? (而不是 2 ?)
    • 代码通过吃掉两指平移手势来禁用两指平移。所以最小和最大接触应该是 2。
    • 为我工作,但找不到任何其他方法。非常感谢!
    • 感谢您的提示。让我们的应用表现得更好。
    【解决方案2】:

    如果你使用 iOS SDK 5.0 以上,或许你可以直接使用 ui pan 手势识别器。

    @property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
    
    ......
    
    [self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1];
    [self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1];
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        问题

        UIPanGestureRecognizerUIScrollView 的基础(不幸的是,这也会影响UIPageViewControllermaximumNumberOfTouches em> 的行为与预期不符 - minimumNumberOfTouches 但始终正确限制下限。

        在监控这些参数时,它们似乎在做自己的工作 - 只是 UIScrollView 不尊重它们并忽略它们的值!


        补救措施

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

        UIScrollView scrolling only with one finger

        【讨论】:

          猜你喜欢
          • 2011-07-03
          • 1970-01-01
          • 2014-04-10
          • 1970-01-01
          • 1970-01-01
          • 2013-01-31
          • 2013-08-05
          • 2011-05-31
          • 2013-06-05
          相关资源
          最近更新 更多