2017-02-17 3 views
1

У меня есть UIScrollView, а рамка просмотра прокрутки не равна раме UIView. Таким образом, содержимое прокрутки не вызывается во время прокрутки вне рамки просмотра прокрутки. Но я хочу, чтобы весь экран реагировал на просмотр прокрутки, хотя вид прокрутки не охватывает весь экран. Я знаю, что это можно сделать, сделав рамку просмотра прокрутки равной раме зрения. Но я не хочу этого делать. Я пробовал другие возможные решения, которые я нашел до сих пор. Но ничего не работает, как я хочу. Мне нужно сделать это с помощью распознавателя жестов.Признать жестом салфетки в UIView для прокрутки scrollView с помощью распознавателя жестов

Ниже мой код:

override func viewDidLoad() { 
     super.viewDidLoad() 
     scrollView.delegate = self 

     let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) 
     swipeRight.direction = UISwipeGestureRecognizerDirection.right 
     self.view.addGestureRecognizer(swipeRight) 


     let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) 
     swipeLeft.direction = UISwipeGestureRecognizerDirection.left 
     self.view.addGestureRecognizer(swipeLeft) 

} 

func respondToSwipeGesture(gesture: UIGestureRecognizer) { 
     if let swipeGesture = gesture as? UISwipeGestureRecognizer { 
      switch swipeGesture.direction { 
      case UISwipeGestureRecognizerDirection.right: 

       scrollView.panGestureRecognizer.isEnabled = true 

      case UISwipeGestureRecognizerDirection.left: 

       scrollView.panGestureRecognizer.isEnabled = true 


      default: 
       break 
      } 
     } 
    } 

Это мой вид контроллера и синий фон вид прокрутки. Жест жестов работает только на этой синей области. Но я хочу, чтобы он работал через экран даже в углах. Как я могу достичь этого с помощью распознавателя жестов?

+1

См. Http://stackoverflow.com/a/43328905/5173807 – 9it3e1

ответ

3

EDIT

Я на самом деле только узнали о гораздо проще решение: просто добавьте view.addGestureRecognizer(scrollView.panGestureRecognizer) в ваш viewDidAppear или viewDidLoad.

То, что это по существу делает это взять scrollView «s UIPanGestureRecognizer, жест распознаватель, который распознает палец перетаскивание и Прокручивает scrollView» содержание s, и дает ему основания зрения, чтобы он мог распознать палец перетаскивания и прокрутки в scrollView «S содержание тоже.

Так что вам не нужны все математические и scrollRectToVisible, как описано ниже. Ну, я думаю, полезно и интересно узнать больше о том, как работает UIScrollViews!

OLD

Чтобы программно сделать UIScrollView "прокрутки", используйте UIScrollView-х scrollRectToVisible.

См. Programmatically scroll a UIScrollView для получения более подробной информации и синтаксиса кода.

В принципе, в любой момент времени содержимое содержимого UIScrollView компенсируется некоторой суммой из его кадра.

Это помогает понять части к UIScrollView (особенно содержание подвида.), Как на этой картинке (не стесняйтесь игнорировать фиолетовый UIImageView): enter image description here

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

Во втором/среднем изображении субвизны UIScrollView теперь смещены «вверх»: верхний левый угол содержимого subview находится примерно на чем-то вроде (0, -200), где (0, 0) по-прежнему остается верхним левый угол кадра UIScrollView.

Опять же, вы можете изменить смещение subview содержимого UIScrollView и, таким образом, имитировать «прокрутку», используя scrollRectToVisible и параметр animated: true.

Подсказка: иметь левое содержание прокрутки (после того, как пользователь пойло справа налево), например, вы хотите взять текущее содержимое UIScrollView в офсет-х координату х (scrollView.contentOffset.x) и вычитания ширины UIScrollView (scrollView.frame.size.width). Поэтому, если текущее смещение содержимого UIScrollView (верхний левый угол) равно (0, 0), смещение содержимого (верхний левый угол) перемещается из (0-ширина, 0), а содержимое «перемещается» влево.

+1

Одна из проблем с новым методом заключается в том, что жест панорамы теперь обнаруживается только на внешнем виде, а не на реальном прокрутке! Поэтому я использовал метод, упомянутый в https://stackoverflow.com/questions/41131986/scrollview-gesture-recognizer-swipe-vertically/43328905#43328905. – Abu

0

Сделайте вид прокрутки фрейме зрения, но затем установить вставку содержимого/смещение, так что она идет только до синей рамки

+0

Кроме того, если вы хотите, чтобы синий фон шел только туда, просто добавьте UIView с этим фоновым цветом в качестве подсмотра в свой scrollview, но используя старый кадр (с зазором) – Florensvb

+0

Можете ли вы написать код PLZ? – mumu

Смежные вопросы