我想禁用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
,我可以成功禁用单指滚动并需要两次触摸。
有什么想法吗?
答案 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 强>:
您可以在我的答案中找到解决方案: