2016-05-22 96 views
1

設置:我有一個橫向工作的滾動視圖,以及一個UISwipeGestureRecognizer,當我向下滑動時觸發一個segue到另一個視圖。禁用UIScrollView慣性(scrollViewDidEndDecelerating)Swift

問題:如果我水平滾動,我開始向下滑動(垂直滾動禁用),而滾動減速,則向下滑動動作(SEGUE)不執行。它只在滾動減速完成後才起作用。

enter image description here

有沒有一種方法來禁用滾動減速(又名慣性),使我的向下滑動手勢可以立即被檢測到?也許有一種解決方法可以首先強制檢測UISwipeGestureRecognizer?

在Swift中的解決方案非常感謝!

回答

1

的UIScrollView有pinchGestureRecognizerpanGestureRecognizer。如果你有一個UISwipeGestureRecognizer ,手勢很可能會被識別爲UIPanGestureRecognizer
您可以添加一個依賴來解決這個問題:

scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture) 
+0

這實際上幫助我實現了我最初想要的。謝謝! – theflarenet

0

你看這裏嗎? Deactivate UIScrollView decelerating

答案

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

轉換爲SWIFT是

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

不幸的是,我已經嘗試這種解決方案在幾分鐘前,發現它與我的'UISwipeGestureRecognizer'向下滑動,檢測干擾。由於BeginDecelerating中的黑客攻擊,我使用滾動視圖時沒有檢測到任何手勢。也許在EndDecelerating中另一個竅門是解決方法? – theflarenet

1

斯威夫特3

要禁用減速滾動,你可以嘗試:

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

或更改此值:

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

關於您gestureRecognizer干擾,你可以調用此方法來排除身體接觸:

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。不能突變 –