Как заставить ScrollView потреблять событие касания, даже когда оно прокручивается до конца? - PullRequest
2 голосов
/ 21 мая 2019

У меня есть FSPagerView, в котором есть элемент, содержащий прокручиваемую диаграмму (представление прокрутки, имеющее несколько стековых представлений). Когда я прокручиваю столбчатую диаграмму, если есть прокручиваемое пространство, событие касания поглощается диаграммой, и она прокручивается. Если на стороне нет прокручиваемого пространства, и я продолжаю прокручивать эту сторону, касаясь столбчатой ​​диаграммы, она больше не потребляет событие касания, а вместо этого прокручивает все FSPagerView. Как сделать так, чтобы scrollview потреблял сенсорное событие даже в таком случае? Короче говоря, я не хочу прокручивать FSPagerView при касании столбчатой ​​диаграммы.

Вот видео: https://streamable.com/kuxta

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

Вы можете назначить приоритеты UIGestureRecognizer двух видов прокрутки, используя require (toFail:) .

Вот код, который я пробовал:

scrollView.panGestureRecognizer.require(toFail: collectionView.panGestureRecognizer)

Я не знаю, действительно ли это то, что вы искали. Как только collectionView.panGestureRecognizer что-то обнаружит, представление прокрутки не будет прокручиваться.

1 голос
/ 31 мая 2019

FSPagerView выставляет panGestureRecognizer, что по сути является базовым UICollectionView 'panGestureRecognizer.

Я думаю, что вы можете просто отключить его, пока видите диаграмму.

Не очень знаком с FSPagerView, но я думаю, что вы можете определить, на какой странице вы находитесь, отслеживая FSPagerViewDelegate обратные вызовы. Например, если гистограмма находится на первой странице (то есть, индекс == 0), возможно, вы можете сделать что-то вроде этого.

override func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) {
    // FSPagerView's gesture recognizer is only enabled for index > 0.
    pagerView.panGestureRecognizer.isEnabled = (index != 0)
}

Если этот обратный вызов не работает, я бы попробовал то же самое с func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) обратным вызовом.

1 голос
/ 28 мая 2019

Вы можете попытаться манипулировать распознавателем жестов UIScrollView:

scrollView.panGestureRecognizer

Я никогда не проверял его с помощью panGestureRecognizer UIScrollView, но общая идея состоит в том, чтобы добавить распознаватель жестов в FSPagerView и установить отношения (используя делегат UIGestureRecognizer) между этим распознавателем и panGestureRecognizer, чтобы предотвратить его запуск

...