У меня установлено PanGestureRecognizer
в представлении контейнера дочернего контроллера.По сути, это представление в виде выдвижного ящика, поэтому я хочу, чтобы дочерний контроллер представления обрабатывал любые прокрутки, за исключением случая, когда табличное представление контроллера дочернего представления прокручивается вверх, а пользователь перемещается вниз.В этом случае я хочу, чтобы распознаватель жестов представления контейнера вступил во владение, чтобы дочерний контроллер представления в целом мог быть анимирован вниз.У меня есть делегат для распознавателя жестов, и это прекрасно работает, если вместо контроллера дочернего представления и представления контейнера это просто табличное представление, и я добавляю к нему распознаватель жестов панорамирования.Хотя теперь это так, делегат возвращает true, когда это должно быть, но метод handlePan не вызывается?Любые идеи были бы хорошы.Спасибо!
Весь приведенный ниже код находится в родительском UIViewController
, у которого есть контейнерное представление, к которому я применяю распознаватель жестов.Все отображается правильно, только метод распознавания жестов не вызывается, но делегат.
func setUpItemDetailsController() {
guard let itemDetailsController = itemDetailsController else { return }
add(itemDetailsController)
itemDetailsContainerView.addSubview(itemDetailsController.view)
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
panGestureRecognizer.delegate = self
itemDetailsContainerView.addGestureRecognizer(panGestureRecognizer)
}
@objc func handlePan(_ sender: UIPanGestureRecognizer) {
...
}
extension MoverScanAndDiscoverResultController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
guard let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else { return true }
let translation = panGestureRecognizer.translation(in: view).y
let topLimit = view.bounds.height - self.statusAndNavBarCombinedHeight
print(itemDetailsTableView.contentOffset.y)
// Allows for normal UITableView scrolling
if translation < 0
&& resultCardViewBottomConstraint.constant == topLimit
|| itemDetailsController?.tableView.contentOffset.y ?? 0 > 0 {
return false
}
return true
}
}