Ручной запуск UIPanGestureRecognizer без касания - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть табличное представление, которое не покрывает весь экран (это как ящик в нижней части экрана).Когда пользователь прокручивает содержимое до конца, я хочу остановить прокрутку, а затем добавить средство распознавания жестов панорамирования.Я делаю это так:

// MARK: UIScrollViewDelegate Methods

extension TutorProfileVC: UIScrollViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        // Limit top vert bounce
        guard mode == .drawer else { return }
        if scrollView.contentOffset.y < -80.0 {
            scrollView.contentOffset = CGPoint(x: 0, y: -80.0)
            tableView.addGestureRecognizer(tablePanGR)
        }
    }

}

Жест был добавлен, но не будет регистрироваться, пока пользователь снова не коснется экрана.Их палец уже на столе.Можно ли запустить жест без необходимости повторного касания экрана?

1 Ответ

0 голосов
/ 13 сентября 2018

Я думаю, что у вас такая же проблема с этим вопросом . Посмотрите на это, если хотите увидеть пример кода.

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

@objc func handlePanGestureRecognizer(_ gestureRecognizer: UIPanGestureRecognizer) {
  switch gestureRecognizer.state {
  case .began:
    // Do nothing
    break
  case .changed:
    let translation    = gestureRecognizer.translation(in: gestureRecognizer.view!.superview!)
    let velocity    = gestureRecognizer.velocity(in: gestureRecognizer.view!.superview)
    let state      = gestureRecognizer.state

    // Don't do anything until |scrollView| reached bottom
    if scrollView.contentOffset.y >= -80.0 {
      return;
    }

    // Do whatever you want with |scrollView|
    }
    break;
  case .cancelled:
  case .ended:
  case .failed:
  default:
    break;
  }
}

Также реализуйте gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:, чтобы жесты и просмотр с прокруткой работали вместе

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...