2016-05-22 16 views
1

セットアップ:私は下にスワイプすると、別のビューにセグをトリガするUISwipeGestureRecognizerと同様に、大きな横に動作するスクロールビューを持っています。UIScrollViewの慣性を無効にする(scrollViewDidEndDecelerating)Swift

問題:私は水平方向にスクロールしていると私は、スクロールがを減速している間(垂直スクロールは無効)下にスワイプし始めた場合、ダウンスワイプアクション(セグエ)は実行されません。スクロールの減速が完了した後でのみ機能します。

enter image description here

私の下にスワイプジェスチャーを瞬時に検出することができる(慣性別名)スクロール減速を無効にする方法はありますか?おそらく、UISwipeGestureRecognizerを最初に検出させるための回避策がありますか?

スイフトのソリューションが高く評価されています!

答えて

1

UIScrollViewのはpinchGestureRecognizerpanGestureRecognizerを持っている:あなたがから触れ除外するために、このメソッドを呼び出すことができ、あなたのgestureRecognizer干渉について

scrollView.decelerationRate = UIScrollViewDecelerationRateNormal 
// UIScrollViewDecelerationRateFast is the other param 

をジェスチャーはUIPanGestureRecognizerと認識される可能性が最も高くなります。
あなたは問題を解決するために依存性を追加することができます。

scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture) 
+0

これは実際に私が元々望んでいたものを達成するのに役立ちました。ありがとうございました! – theflarenet

0

あなたはここを見ましたか? Deactivate UIScrollView decelerating

答え迅速に変換

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ 
[scrollView setContentOffset:scrollView.contentOffset animated:YES]; 
} 

func scrollViewWillBeginDecelerating(scrollView: UIScrollView) { 
scrollView.setContentOffset(scrollView.contentOffset, animated: true) 
} 
+0

は残念ながら、私は数分前にその解決策を試してみました、それは私の 'UISwipeGestureRecognizer'下にスワイプ検出を妨害することを発見しました。 BeginDeceleratingのハックのためにスクロールビューを使用すると、私のジェスチャーは検出されません。回避策としてEndDeceleratingのもう1つのハッキングがありますか? – theflarenet

1

ですスウィフト3:減速を無効にするには

はあなたが試すことができますスクロール:

func scrollViewWillEndDragging (scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 
    targetContentOffset.memory = scrollView.contentOffset 
} 

か、この値を変更します。あなたはUISwipeGestureRecognizerを持っている.IF

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
    // insert here views to exclude from gesture 
    if touch.view!.isDescendantOfView(self.excludeThisView) { 
     return false 
    } 
    return true 
} 
+0

'scrollViewWillEndDragging'についてはわかりませんでした。 'targetContentOffset.memory = scrollView.contentOffset'で試してみましたが効果がありませんでした。なんらかの理由で、私の 'gestureRecognizer'は私のscrollViewの減速(またはバウンス)によってまだ遅れています。私の目標は、 'gestureRecognizer'がスクロールする減速によって遅れることなく即座に実行できるようにすることです。 – theflarenet

+0

targetContentOffsetはletのvarになりました。変異することはできません –

関連する問題