Ios 无限滚动还是其他技术?
我正在为UICollectionView设计一个水平布局来表示时间线。理想情况下,我希望它无限滚动,但我不确定正确的方法是什么 现在,我从UICollectionViewLayout的一个子类和一个只有3个单元格的简单例子开始。我重写了scrollView委托方法ScrollViewDiEndDecelling并跳回中心卡,偏移我的模型以匹配 这是有效的,除非用户快速滚动,并到达另一张卡的末端。他们被抓住了,必须释放集合视图。当视图停止减速时,会发生对中,并且可以继续 我有一个演示 我想知道是否还有其他方法,或者我遗漏了什么。我熟悉苹果在无限滚动视图上的WWDC演示,也看过滚动文本的演示项目,但我不知道如何使其与分页或集合视图一起工作 有人能帮忙吗 如果您想知道用户何时移动到新页面,应该使用scrollViewDidScroll。正如您所发现的,如果用户快速滚动,则不会调用ScrollViewDiEndDecelling,因为滚动视图从未停止移动 我已将您的代码修改为: 在scrollViewDidScroll而不是ScrollViewDidEndDecelling上触发。 使用集合视图边界的中心点测试索引路径,然后在第一个或第三个单元格位于屏幕中间时更新单元格。 直接设置内容偏移量,而不是滚动到索引路径,从滚动视图的当前位置跳转一整页。 代码如下:Ios 无限滚动还是其他技术?,ios,objective-c,uiscrollview,uicollectionview,Ios,Objective C,Uiscrollview,Uicollectionview,我正在为UICollectionView设计一个水平布局来表示时间线。理想情况下,我希望它无限滚动,但我不确定正确的方法是什么 现在,我从UICollectionViewLayout的一个子类和一个只有3个单元格的简单例子开始。我重写了scrollView委托方法ScrollViewDiEndDecelling并跳回中心卡,偏移我的模型以匹配 这是有效的,除非用户快速滚动,并到达另一张卡的末端。他们被抓住了,必须释放集合视图。当视图停止减速时,会发生对中,并且可以继续 我有一个演示 我想知道是否
- (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时,同样的原则也适用。