UICollectionView具有无限滚动?

时间:2013-03-20 16:50:25

标签: ios uiscrollview uipickerview uicollectionview

我正在尝试使用无限滚动行为实现集合视图。滚动应该是圆形的 - 就像在UIPickerView中一样。是否可以使用Apple的UICollectionView或者除了创建水平PickerView之外别无选择?

您怎么看?

4 个答案:

答案 0 :(得分:2)

您应该观看WWDC 2011会话视频“高级ScrollView技术”,他们谈论无限滚动,我很确定可以将其与UICollectionView一起使用。滚动时会重新显示,并将新项目放在当前可见项目之后(或之前,具体取决于滚动方向)。

就像他们在会话中所说的那样,你应该使用具有结尾的方法。就像在会议中所说:人们肯定会在某一点找到优势。

答案 1 :(得分:0)

重写此方法以启用无限滚动。只要距离中心太远,它就会集中内容,用户永远不会达到目的。

-(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);
}

}

答案 2 :(得分:-1)

感谢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);

}

这将产生无限滚动效果。 要启用无限滚动两边,请在ViewWillAppear中使用ScrolltoIndexpath :( Itemscount的中间)!! 希望这将有助于即将构建无限滚动UICollectionView的人。

答案 3 :(得分:-2)

是的,你可以这样做。为collectionView:numberOfItemsInSection:返回一个非常大的数字,并在collectionView:cellForItemAtIndexPath:中,使用mod运算符始终为indexPath.Row返回一个数字,该数字介于0和数据数组中的最后一个索引之间。因此,如果你的数组中有20个项目,你可以这样做:

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