2016-07-27 5 views
1

У меня есть 2 UIPageViewControllers один внутри другого, оба с горизонтальным прокруткой. Один полноэкранный режим, содержащий всю информацию о пользователе, другую - фотогалерею этого пользователя. Поведение: когда я сажу все пользовательские фотографии, он просматривает весь экран. Но иногда я не могу прорисовывать фотографии, кажется, что этот жест заблокирован, и он просматривает только первый пейджер. Но он разблокируется, когда я делаю задний ход. Вот видео, о чем я говорю: https://youtu.be/Hr7tDKNv15A Помогите мне найти ошибку, вызвавшую его, теперь я не могу представить, как мне нужно отлаживать это.2 UIPageViewControllers жесты конфликты

перекрытой Трассировка зрения контейнера, в котором хранится внутренний пейджер:

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 
     if pointInside(point, withEvent: event) { 
      print("Inside") 
      print("Self view:\(self)") 
      print("Self subviewsview:\(self.subviews)") 
      print("Self subviewsview of subview:\(self.subviews[0].subviews)") 

      return self.subviews[0].subviews[0] 

     } else { 
      print("Outside") 
      return nil 
     } 

    } 

Это мой выход, когда я коснуться фотографий:

Inside 
Self view:<armeniaApp.debugGesture: 0x7f7f8be46e60; frame = (0 0; 400 400); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7f7f8be1e7c0>> 
Self subviewsview:[<_UIPageViewControllerContentView: 0x7f7f8be920a0; frame = (0 0; 400 400); clipsToBounds = YES; opaque = NO; autoresize = W+H; layer = <CALayer: 0x7f7f89ff1e00>>] 
Self subviewsview of subview:[<_UIQueuingScrollView: 0x7f7f8a836e00; frame = (0 0; 400 400); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x7f7f8be81db0>; layer = <CALayer: 0x7f7f8be522b0>; contentOffset: {400, 0}; contentSize: {1200, 400}>] 

Так жест, что мне нужно магазины в UIQueuingScrollView, но что я нужно сделать дальше? return self.subviews[0].subviews[0] не помогает

ответ

1

я предлагаю взглянуть на requireGestureRecognizerToFail: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/#//apple_ref/occ/instm/UIGestureRecognizer/requireGestureRecognizerToFail:

Похоже, UIKit становится спутать, какой контроллер страницы, чтобы передать жесты как они оба будут прослушивать тоже самое.

Я бы предположил, что вы хотите, чтобы распознаватели жестов внешнего вида просмотра (доступные как свойство массива: self.pageViewController.gestureRecognizers) требовали, чтобы распознаватели жестов внутреннего контроллера просмотра страниц терпели неудачу. Таким образом, совпадение между фотографиями будет иметь приоритет, но если дальнейших фотографий нет, вы можете прокручивать между профилями.

+0

Невозможно получить доступ к этим жестам, и поэтому методы делегата не вызываются: C В любых местах он говорит, что массив gestureRecognizer пуст (любые идеи? –

+0

Извините, просто заметили это в документах: «Только заполненный, если стиль перехода is 'UIPageViewControllerTransitionStylePageCurl' –

+0

Вы можете посмотреть на переопределение« hitTest: »и убедиться, что касания внутри внутреннего контроллера просмотра страницы пересылаются ему, когда он имеет возможность прокручивать, но все остальное перенаправляется на внешний контроллер просмотра страницы? –