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