iOS - обнаружение panGesture на краю экрана, чтобы открыть боковое меню + UICollectionView с горизонтальной прокруткой - PullRequest
0 голосов
/ 05 октября 2018

У меня просто есть UICollectionView внутри моего UIViewController.

Я использую SWRevealViewController для открытия левого / правого бокового меню.Я могу установить его panGestureRecognizer для обеспечения полноэкранного панорамирования.

view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

Следующий метод предоставит panGestureRecognizer, подходящий для добавления в любое представление, чтобы выполнять обычные жесты перетаскивания и смахивания, чтобы показать заднюю часть.Просмотры.Обычно это добавляется к верхней панели фронт-контроллера, но может быть добавлено к вашему представлению frontViewController или к представлению отображения контроллера, чтобы обеспечить полноэкранное панорамирование.По умолчанию panGestureRecognizer добавляется в представление, содержащее представление переднего контроллера.Чтобы сохранить это поведение по умолчанию, вам все равно нужно вызвать этот метод, просто не добавляйте его ни в одно из ваших представлений.Настройка по умолчанию позволяет отключить взаимодействие пользователя с представлениями вашего контроллера, не затрагивая распознаватель.

Моя проблема заключается в том, что в определенной ячейке моего UICollectionView у меня нет промежутков по краям.cellWidth = collectionView.bounds.size.width И эта ячейка содержит UICollectionView с горизонтальной прокруткой.

Вместо того, чтобы открывать мое левое / правое меню, он просто прокручивает по горизонтали мой UICollectionView.

Я хотел бы обработать этот сценарий:

1: , если panGesture находится внутри UICollectionViewCell, содержащего UICollectionView с горизонтальной прокруткой.

2: определяет местоположение жеста на горизонтальной оси, и, если оно находится на краю экрана, не запускайте горизонтальную прокрутку UICollectionView, а запускайте panGesture, чтобы открыть меню.

После прочтения большого количества статей и официальной документации я нашел этот UIScreenEdgePanGestureRecognizer .

Но также, что эту логику следует выполнять путем переопределения метода shouldReceiveTouch , я прав?

Любой намек на то, как мне это реализовать?

РЕДАКТИРОВАТЬ:

После гВ ответ на вопрос, предложенный в комментарии, я попытался, но он не работает.

let edgePanGesture = UIScreenEdgePanGestureRecognizer()
collectionView.panGestureRecognizer.require(toFail: edgePanGesture)

Я установил это в своей ячейке, содержащей горизонтальный collectionView, но он не работает.

Iможет быть, что-то упускает, любая помощь?

...