Отключить прокрутку 2 пальцев в UIScrollView
Я хотел бы отключить прокрутку с двумя пальцами в 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];
Ответ 2
если вы используете SDK для iOS более 5.0, возможно, вы можете напрямую использовать распознаватель жестов ui pan.
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
......
[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1];
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1];
Ответ 3
Я хочу снова открыть этот вопрос.
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
......
[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1];
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1];
Я пробовал это решение на iOS 7 и iOS 8, и мне кажется, что setMaximumNumberOfTouches: 1 не имеет никакого эффекта. Возможна прокрутка 2 или 3 пальца.: (
Ответ 4
Я могу подтвердить, что это все еще проблема в iOS 8, но только тогда, когда UIPanGestureRecognizer лежит в основе UIScrollView. Создание UIView со свежим UIPanGestureRecognizer и установка его свойства maximumNumberOfTouches работает как ожидалось.
Передано rdar://20890684 и скопировано в http://openradar.appspot.com/radar?id=6191825677189120. Пожалуйста, не стесняйтесь.
Ответ 5
ПРОБЛЕМА
Когда UIPanGestureRecognizer
лежит в основе UIScrollView
(что, к сожалению, также влияет на UIPageViewController
), maximumNumberOfTouches
работает не так, как ожидалось - minimumNumberOfTouches
однако всегда правильно ограничивает нижний конец.
При мониторинге этих параметров они, похоже, выполняют свою работу - это просто то, что UIScrollView
не соблюдает их и игнорирует их значения!
УСТРАНЕНИЯ
Вы можете найти решение в своем ответе на:
Прокрутка UIScrollView только одним пальцем