与无限滚动UICollectionView?(UICollectionView with infin

2019-08-17 19:34发布

我试图实现与无限滚动行为的集合视图。 滚动应该是圆形的-就像在一个UIPickerView 。 可以将它与苹果进行UICollectionView或者没有选择,只能创建水平PickerView?

你怎么看?

Answer 1:

你应该看WWDC 2011会话视频“高级滚动型技术”,他们谈论无限滚动,而且我敢肯定它可能使用与UICollectionView秒。 它(取决于滚动方向之前,或)recenters在滚动,并把当前可见的项目后的新项目。

就像他们在会议上说,你应该使用有一个结局的方法。 就像在会议上说:人们会在一个点上绝对找不到的边缘。



Answer 2:

重写此方法,使无限滚动两种方式。 据中心的内容时,它距离市中心太远,用户永远不会打到底。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGPoint currentOffset = self.collectionView.contentOffset;
CGFloat contentWidth = self.collectionView.contentSize.width;
CGFloat centerOffsetX = (contentWidth - self.collectionView.bounds.size.width) / 2.0;
CGFloat distanceFromCenter = fabs(currentOffset.x - centerOffsetX);

if (distanceFromCenter > (contentWidth / 4.0)) {
    self.collectionView.contentOffset = CGPointMake(centerOffsetX, currentOffset.y);
}

}


Answer 3:

由于rdelmar一个棘手的解决方案。 “为的CollectionView大量:numberOfItemsInSection”这个想法的工作就像一个魅力。 我试图实现与UIScrollView的委托方法相同。 但产量生涩。

下面是我的一些代码的一部分。

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

return 100;}

// CellforRow

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

// Setup cell identifier
static NSString *cellIdentifier = @"cvCell";


CVCell *cell;
        cell = (CVCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

        [cell.titleLabel setText:[self.dataArray objectAtIndex:(indexPath.row)%self.dataArray.count]];

return cell;

}

// DidSelect

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{


NSLog(@"Index path is %d", indexPath.row%self.dataArray.count);

}

这将给无限滚动效果。 要启用无限滚动两侧,使用ScrolltoIndexpath:在viewWillAppear中(Itemscount中间)! 希望这会帮助别人谁是即将建成的无限滚动UICollectionView。



Answer 4:

是的,你可以做到这一点。 返回一个非常大的数量的CollectionView:numberOfItemsInSection :,和的CollectionView:cellForItemAtIndexPath :,你使用Mod运算符总是返回indexPath.Row一个数字,0和数据数组中的最后一个索引之间的。 所以,如果您在数组中有20个项目,你会做这样的事情:

item.whatever.text = [self.theData objectAtIndex:indexPath.row %20];


文章来源: UICollectionView with infinite scrolling?