Ios 无限滚动还是其他技术?

Ios 无限滚动还是其他技术?,ios,objective-c,uiscrollview,uicollectionview,Ios,Objective C,Uiscrollview,Uicollectionview,我正在为UICollectionView设计一个水平布局来表示时间线。理想情况下,我希望它无限滚动,但我不确定正确的方法是什么 现在,我从UICollectionViewLayout的一个子类和一个只有3个单元格的简单例子开始。我重写了scrollView委托方法ScrollViewDiEndDecelling并跳回中心卡,偏移我的模型以匹配 这是有效的,除非用户快速滚动,并到达另一张卡的末端。他们被抓住了,必须释放集合视图。当视图停止减速时,会发生对中,并且可以继续 我有一个演示 我想知道是否

我正在为UICollectionView设计一个水平布局来表示时间线。理想情况下,我希望它无限滚动,但我不确定正确的方法是什么

现在,我从UICollectionViewLayout的一个子类和一个只有3个单元格的简单例子开始。我重写了scrollView委托方法ScrollViewDiEndDecelling并跳回中心卡,偏移我的模型以匹配

这是有效的,除非用户快速滚动,并到达另一张卡的末端。他们被抓住了,必须释放集合视图。当视图停止减速时,会发生对中,并且可以继续

我有一个演示

我想知道是否还有其他方法,或者我遗漏了什么。我熟悉苹果在无限滚动视图上的WWDC演示,也看过滚动文本的演示项目,但我不知道如何使其与分页或集合视图一起工作

有人能帮忙吗

如果您想知道用户何时移动到新页面,应该使用scrollViewDidScroll。正如您所发现的,如果用户快速滚动,则不会调用ScrollViewDiEndDecelling,因为滚动视图从未停止移动

我已将您的代码修改为:

在scrollViewDidScroll而不是ScrollViewDidEndDecelling上触发。 使用集合视图边界的中心点测试索引路径,然后在第一个或第三个单元格位于屏幕中间时更新单元格。 直接设置内容偏移量,而不是滚动到索引路径,从滚动视图的当前位置跳转一整页。 代码如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [self centerIfNecessary];
}

- (void)centerIfNecessary
{
    // Fetch the index path in the middle of the collection view
    NSIndexPath *visibleIndexPath = [self.collectionView indexPathForItemAtPoint:CGPointMake(self.collectionView.contentOffset.x +
                                                                                             self.collectionView.bounds.size.width/2,
                                                                                             self.collectionView.contentOffset.y)];

    NSInteger row = visibleIndexPath.row;

    //  Three cases:    Row is 0, so we've moved left.
    //                  Row is 1, we haven't moved.
    //                  Row is 2, we've moved right.

    if (row == 0)
    {
        self.date = [[self calendar] dateBySubtractingDays:1 fromDate:self.date];
        self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x +
                                                        self.collectionView.bounds.size.width,
                                                        self.collectionView.contentOffset.y);
        [self.collectionView reloadData];
    }
    else if (row == 2)
    {
        self.date = [[self calendar] dateByAddingDays:1 toDate:self.date];
        self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x -
                                                        self.collectionView.bounds.size.width,
                                                        self.collectionView.contentOffset.y);
        [self.collectionView reloadData];
    }
}

通过在水平UICollectionView的两侧添加额外的单元格,可以使其看起来像一个无限滚动的滚动视图。如果contentOffset靠近左侧,它将在滚动内容视图的右侧显示完全相同的单元格。我想您可以从gitHub中的HFSwipeView控件中了解如何解决这个问题。

这段代码的弹性有多大?这似乎是开箱即用的,但如果我更改单元格的大小,使屏幕上出现多个单元格,该怎么办?上面的代码有两个假设:页面大小等于集合视图边界的大小,滚动是水平的。为了推广它,您需要使用contentOffset来建立页面偏移量(水平和/或垂直)。在使用scrollViewDidScroll检查和调整contentOffset时,同样的原则也适用。