禁用 UIScrollView 惯性 (scrollViewDidEndDecelerating) Swift
Disable UIScrollView inertia (scrollViewDidEndDecelerating) Swift
设置: 我有一个滚动视图,它在水平方向上效果很好,还有一个 UISwipeGestureRecognizer,当我向下滑动时,它会触发切换到另一个视图。
问题:如果我水平滚动并开始向下滑动(禁用垂直滚动)当滚动减速时,向下滑动动作 (segue) 不执行。只有在滚动减速完成后才有效。
有没有办法禁用滚动减速(又名惯性),以便可以立即检测到我的向下滑动手势?也许有一种解决方法可以强制首先检测到 UISwipeGestureRecognizer?
非常感谢 Swift 中的解决方案!
你看过这里吗?
Deactivate UIScrollView decelerating
答案
-(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
}
或者您更改此值:
scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
// UIScrollViewDecelerationRateFast is the other param
关于你的gestureRecognizer interferences你可以调用这个方法来排除触摸:
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 有一个 pinchGestureRecognizer
和一个 panGestureRecognizer
。如果你有一个 UISwipeGestureRecognizer
,手势很可能会被识别为 UIPanGestureRecognizer
。
可以添加一个依赖来解决问题:
scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture)
设置: 我有一个滚动视图,它在水平方向上效果很好,还有一个 UISwipeGestureRecognizer,当我向下滑动时,它会触发切换到另一个视图。
问题:如果我水平滚动并开始向下滑动(禁用垂直滚动)当滚动减速时,向下滑动动作 (segue) 不执行。只有在滚动减速完成后才有效。
有没有办法禁用滚动减速(又名惯性),以便可以立即检测到我的向下滑动手势?也许有一种解决方法可以强制首先检测到 UISwipeGestureRecognizer?
非常感谢 Swift 中的解决方案!
你看过这里吗? Deactivate UIScrollView decelerating
答案
-(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
}
或者您更改此值:
scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
// UIScrollViewDecelerationRateFast is the other param
关于你的gestureRecognizer interferences你可以调用这个方法来排除触摸:
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 有一个 pinchGestureRecognizer
和一个 panGestureRecognizer
。如果你有一个 UISwipeGestureRecognizer
,手势很可能会被识别为 UIPanGestureRecognizer
。
可以添加一个依赖来解决问题:
scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture)