Ios 禁用UIScrollView惯性(滚动视图减速)Swift

Ios 禁用UIScrollView惯性(滚动视图减速)Swift,ios,swift,uiscrollview,swipe,Ios,Swift,Uiscrollview,Swipe,设置:我有一个水平方向运行良好的滚动视图,还有一个UISweepGestureRecognitor,当我向下滑动时,它会触发到另一个视图的切换 问题:如果我在水平滚动时开始向下滑动(垂直滚动被禁用)而滚动正在减速,则向下滑动操作(segue)不会执行。它只在滚动减速完成后工作 有没有办法禁用滚动减速(又称惯性)以便可以立即检测到我的向下滑动手势?也许有一种解决方法可以强制首先检测UISweepGestureRecognitor 高度赞赏Swift中的解决方案 你看这里了吗? 答案 -(voi

设置:我有一个水平方向运行良好的滚动视图,还有一个UISweepGestureRecognitor,当我向下滑动时,它会触发到另一个视图的切换

问题:如果我在水平滚动时开始向下滑动(垂直滚动被禁用)而滚动正在减速,则向下滑动操作(segue)不会执行。它只在滚动减速完成后工作

有没有办法禁用滚动减速(又称惯性)以便可以立即检测到我的向下滑动手势?也许有一种解决方法可以强制首先检测UISweepGestureRecognitor

高度赞赏Swift中的解决方案

你看这里了吗?

答案

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{  
[scrollView setContentOffset:scrollView.contentOffset animated:YES];   
}
转换成swift是

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

Swift 3

要禁用减速滚动,您可以尝试:

func scrollViewWillEndDragging (scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    targetContentOffset.memory = scrollView.contentOffset
}
关于您的手势识别器干扰,您可以调用此方法来排除触摸:

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
}

UIScrollView有一个
PinchGestureRecognitor
和一个
PanGestureRecognitor
。如果您有一个
UISweepGestureRecognitor
,该手势很可能会被识别为
UIPanGestureRecognitor
您可以添加依赖项来解决此问题:

scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture)

不幸的是,我在几分钟前尝试过该解决方案,发现它干扰了我的
uisweepegesturecognitioner
向下滑动检测。一旦我使用scrollview,由于BeginDelegrating中的黑客攻击,我的任何手势都不会被检测到。也许是另一个在EndDecreating中的黑客作为解决方法?我不知道
ScrollViewWillendDraging
,它看起来非常有趣。我用
targetContentOffset.memory=scrollView.contentOffset
试过,但没有效果。由于某些原因,我的
手势识别器仍然会因滚动视图中的减速(或任何反弹)而延迟。我的目标是允许
手势识别器
立即执行,而不会因任何滚动减速而延迟。targetContentOffset现在是一个let变量。无法变异这实际上帮助我实现了我最初想要的。非常感谢。
scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture)