在 UIScrollView 中禁用 2 指滚动
Posted
技术标签:
【中文标题】在 UIScrollView 中禁用 2 指滚动【英文标题】:Disable 2 finger scrolling in UIScrollView 【发布时间】: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
,我可以成功禁用单指滚动并需要两次触摸。
有什么想法吗?
【问题讨论】:
【参考方案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】:问题:
当 UIPanGestureRecognizer
是 UIScrollView
的基础(不幸的是,这也会影响UIPageViewController
)maximumNumberOfTouches
em> 的行为与预期不符 - minimumNumberOfTouches
但始终正确限制下限。
在监控这些参数时,它们似乎在做自己的工作 - 只是 UIScrollView
不尊重它们并忽略它们的值!
补救措施:
您可以在我的回答中找到解决方案:
UIScrollView scrolling only with one finger
【讨论】:
以上是关于在 UIScrollView 中禁用 2 指滚动的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C:如何在 UIScrollView 中禁用垂直滚动