Подтвердить что ты не робот

Отключить прокрутку 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, я могу успешно отключить прокрутку одним пальцем и потребовать два касания.

Любые идеи?

4b9b3361

Ответ 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 только одним пальцем