检测UICollectionView滚动方向,从REST加载数据

4
假设使用标准配置(向上/向下),我想检测用户何时滚动他们的UIColletionView,以及滚动方向(它是UIScrollView的子类并符合UIScrollViewDelegate)。我没有看到任何直接检测这一点的委托信息,尽管我可能会忽略一些东西。
如果我知道用户正在滚动的方向,那么我可以使用这些UICollectionViewDatasource方法来确定是否应该从REST服务器加载更多数据,或清除已经拥有的信息以管理固定内存空间。
// 如果向下滚动,则出现节段
- (UICollectionReusableView *)collectionView:(UICollectionView *)cv viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {

// 如果往下滚动,部分中的最后一个单元格会消失

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{

// 如果向上滚动,该分组中的最后一个单元格将出现

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {

// 如果向上滚动,则该部分正在消失

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath{

请查看此链接 https://dev59.com/uG025IYBdhLWcg3wGB0n 以了解如何判断是否已经滑动到了底部。 - Rui Peres
我已经知道如何检测是否到达了底部。谢谢。 - VaporwareWolf
如果你想知道它是向上(或向下)的:https://dev59.com/Zmsz5IYBdhLWcg3wuKQm - Rui Peres
2个回答

10
您可以检查UIScrollView的(UICollectionView继承自此)panGestureRecognizer属性,并执行以下操作:
CGPoint scrollVelocity = [collectionView.panGestureRecognizer velocityInView:collectionView.superview];
if (scrollVelocity.y > 0.0f) {
    NSLog(@"going down");
} else if (scrollVelocity.y < 0.0f) {
    NSLog(@"going up");
}

Swift 3.1:

let scrollVelocity = collectionView.panGestureRecognizer.velocityInView(collectionView.superview)
if (scrollVelocity.y > 0.0) {
    print("going down")
} else if (scrollVelocity.y < 0.0) {
    print("going up")
}

太好了!正是我在寻找的东西。如果编辑没有生效,请注意,velocityInView返回的是一个CGPoint结构体,而不是一个float。如果你的集合视图是垂直滚动的,则需要检查y值。 - VaporwareWolf
@HCHogan 我试过了,但scrollView是null。你的视图应该是什么?UICollectionView? - Dejell

0

你也可以使用这个:

CGPoint translation = [collectionView.panGestureRecognizer translationInView:collectionView.superview];
        if (translation.y > 0) {
            NSLog(@"DOWN");
        } else {

            NSLog(@"UP");
        }

更准确


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