iOSシステムPOPジェスチャーとUIscrollViewジェスチャーの衝突の解決方法

1604 ワード

質問:
あるアプリケーションでは、DetailViewControllerはHomeViewController pushから入り、github上にオープンソースのFDFullscreenPopGestureを使用してジェスチャーをして戻りますが、DetailViewControllerではジェスチャー戻りは有効ではありません.
簡単な分析:
次のページの内容を見ると、UIDIewControllerにはUIscrollViewが1つ入っています.操作中、指を右にスライドさせ、UIscrollViewを一番左にスライドさせると、所望のスライド戻りジェスチャーが有効になります.実はUIscrollViewのPanGestureRecognizerとViewControllerのfd_fullscreenPopGestureRecognizerが衝突し、両者ともPanジェスチャーであり、UIscroollViewの層に着くと、下への伝達が継続されず、スライド戻りジェスチャーが失効する.それは、UIscrollViewが一番左(ContentOffsetのxが0)にスライドしたときに、ViewControllerのfd_F u l l s creenPopGestureRecognizerは引き続き有効になればいいですか?やってみよう!
新しいJJSScrollViewUIScrollViewを継承し、gestureRecognizer:(UIGestureRecognizer)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer)otherGestureRecognizer
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    //    otherGestureRecognizer       POP   
    if ([otherGestureRecognizer.view isKindOfClass:NSClassFromString(@"UILayoutContainerView")]) {
        //    POP        begin    fail,     scrollView   ContentOffset.x        
        if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan && self.contentOffset.x == 0) {
            return YES;
        }
    }
    return NO;
}

結果:
UIViewControllerのUIscrollViewをカスタムJJSScrolViewに変更し、アプリケーションを再実行します.UIscroollViewを一番左にスライドし、左にスライドし続け、ジェスチャーに戻ります.問題解決!
最後に書く
皆さん、私の友达を加えて、iOSの开発に関する知识を一绪に検讨することを歓迎します.もしあなたが开発の过程でどんなバグに出会ったら、私に送って一绪に解决することができます.