强制停止UICollectionView的滚动。

18

用户执行快速滑动手势,使UICollectionView开始滚动(它将逐渐停止)。

我应该如何通过编程强制滚动立即停止? 澄清一下,我想允许减速,但需要能够在代码中停止它。

5个回答

36

你是否尝试过以下方法?

[self.collectionView setContentOffset:self.collectionView.contentOffset animated:NO];

contentOffset属性会在collectionView滚动时(包括通过动画)不断更新,因此在调用上述方法时,希望它能强制停止collectionView的现有动画。


2
不起作用,需要更改y或x值之一。我使用了这个代码,它可以正常工作:`CGPoint offset = self.collectionView.contentOffset; (self.collectionView.contentOffset.y > 0) ? offset.y-- : offset.y++; [self.collectionView setContentOffset:offset animated:NO];` - Pétur Ingi Egilsson

36

试试这个,对我有用。 :)

self.collectionView.scrollEnabled = NO;

他们仍然可以点击项目以滚动到它们:/ - Ky -

13

对于Swift 3:

collectionView.isScrollEnabled = false

5

如果您将 pagingEnabledscrollEnabled 属性设置为 true,则应该可以正常工作:

self.collectionView.scrollEnabled = false
self.collectionView.pagingEnabled = false

1
采用以下scrollViewDelegate方法,在用户松开拖动collectionView时进行拾取。
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;

你可以创建自己的动画块,使用 contentOffset 属性设置最终目标和速度,以达到最佳效果。

这不适合我的情况。我需要能够随时中断动画。 - Pétur Ingi Egilsson
1
好的,那么你可以随时设置contentOffset属性。这将强制它停止。 - Tommy Devoy
self.collectionView.contentOffset = CGPointZero; 将内容偏移设置为起始位置,但它不会中止动画。它只是从0,0继续进行。 - Pétur Ingi Egilsson
1
你需要执行setContentOffSet:yourOffset animated:NO。 - Tommy Devoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接