有没有办法停用UIScrollView的减速功能?
我想允许用户滚动画布,但是我不希望画布在用户松开手指后继续滚动。
有没有办法停用UIScrollView的减速功能?
我想允许用户滚动画布,但是我不希望画布在用户松开手指后继续滚动。
可以通过利用UIScrollView
的委托方法scrollViewWillBeginDecelerating
自动将内容偏移设置为当前屏幕位置来实现。
实现方法:
UIScrollView
对象。在委托的.m
实现文件中,添加以下代码行:
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
[scrollView setContentOffset:scrollView.contentOffset animated:YES];
}
完成了!不再自动滚动。
针对 iOS 5.0 及以上版本,有一种比调用 setContentOffset:animated:
更好的方法。
在你的 .m
文件中实现代理方法 scrollViewWillEndDragging:withVelocity:targetContentOffset:
:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
targetContentOffset.pointee = scrollView.contentOffset;
}
将当前的偏移量分配给targetContentOffset
,可以停止UIScrollView
的自动滚动。
您可以将减速率设置得非常高。在无限制的情况下,它会立即停止。尝试将速率设置为以下常量:
scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
并且scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
如果快速仍然不够快,UIScrollViewDecelerationRateFast 只是被定义为一个浮点数,所以你可以将它乘以10或者更多的系数来进一步加速。
decelerationRate
属性只会响应文档中明确说明的值:UIScrollViewDecelerationRateNormal
和 UIScrollViewDecelerationRateFast
。 - Tim ArnoldscrollView.bounces = false
。 - Josh Bernfeld只需将decelerationRate属性设置为0即可。
这将禁用自动滚动属性。但请注意,如果scrollview的contentsize很大,用户交互将变得不好。
之前的 Swift 版本:↓
scrollView.decelerationRate = UIScrollView.DecelerationRate.fast
当前的Swift 4.2版本代码:↓
scrollView.decelerationRate = UIScrollViewDecelerationRateFast