2016-07-27 5 views
1

私は2つのUIPageViewControllerを1つずつ他の内部に持っています。両方とも水平スクロールです。すべてのユーザー情報を含む1つのフルスクリーン、このユーザーの別のフォトギャラリー行動:私はすべてのユーザーの写真をスワイプすると、フルスクリーンをスワイプします。しかし、時々、私は写真をスワイプできません、このジェスチャーがブロックされているように見え、それは最初のページャーだけをスワイプします。しかし、私はスワイプのジェスチャーをやり直すとブロックが解除されます。私が話していることのビデオはここにあります:https://youtu.be/Hr7tDKNv15A私はそれを引き起こしているエラーを見つけるのを助けて、今私はそれをどのようにデバッグする必要があるか想像できません。内側のポケットベルを格納コンテナビューの2 UIPageViewControllerジェスチャの競合

オーバーライドhitTest:

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]は、私がrequireGestureRecognizerToFail見てみることをお勧めしたい

答えて

1

を助けない: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

)これはドキュメント内で見つけただけです: "トランジションスタイル'UIPageViewControllerTransitionStylePageCurl'" –

+0

あなたは 'hitTest:'をオーバーライドして、内側のページビューコントローラ内のタッチがさらにスクロールするときにそれに転送されることを確認できますが、他はすべて外部ページビューコントローラに転送されますか? –