Предотвращение конфликтов с помощью жеста двух пальцев и UIPageViewController

У меня есть UIViewController который содержит UIPageViewController который использует стиль прокрутки. Пользователи могут пролистывать страницы как обычно. Теперь я хочу добавить два пальца UISwipeGestureRecognizer к внешнему контроллеру представления, который содержит контроллер представления страницы. Я хочу, чтобы пользователи могли одним касанием пальца переключать страницы, а два пролистывания пальцем, чтобы вызвать другое действие. Но по умолчанию, когда вы проводите двумя пальцами, iOS прокручивает страницы и игнорирует жест двумя пальцами. Чтобы это исправить, я установил pageViewController.scrollView.panGestureRecognizer требовать, чтобы жест смахивания двумя пальцами потерпел неудачу. Затем он распознает оба по желанию, но проблема в том, что он затрудняет быстрое перелистывание страниц одним пальцем, потому что он ожидает сбоя двух пальцев. Он игнорирует большую часть ввода с помощью пролистывания, поэтому вам действительно нужно нажать и удерживать кнопку, прежде чем одним движением пальца переключать страницы. Я также попытался установить жест панорамирования minimumNumberOfTouches а также maximumNumberOfTouches в 1 но он ведет себя так же.

Что я мог бы сделать, чтобы это работало хорошо, чтобы распознавать только два пальца при проведении двумя пальцами, но не задерживать распознавание одного пальца для переключения страниц?

1 ответ

Прежде всего, вы должны убедиться, что UISwipeGestureRecognizer распознать одновременно с panGestureRecognizer с помощью UIGestureRecognizerDelegate

func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWith: UIGestureRecognizer) {
   return true
}

Затем, когда метод действия вашего пальца UISwipeGestureRecognizer называется, сбросьте panGestureRecognizer вручную.

pageViewController.scrollView.panGestureRecognizer.isEnabled = false
pageViewController.scrollView.panGestureRecognizer.isEnabled = true
Другие вопросы по тегам