無限スクロール動作を持つコレクション ビューを実装しようとしています。スクロールは、 のように循環する必要がありUIPickerView
ます。AppleでできるUICollectionView
か、水平の PickerView を作成するしかありませんか?
どう思いますか?
無限スクロール動作を持つコレクション ビューを実装しようとしています。スクロールは、 のように循環する必要がありUIPickerView
ます。AppleでできるUICollectionView
か、水平の PickerView を作成するしかありませんか?
どう思いますか?
WWDC 2011 セッション ビデオ「Advanced ScrollView Techniques」をご覧ください。無限スクロールについて説明していUICollectionView
ます。スクロール中に中心に移動し、現在表示されているアイテムの後 (またはスクロール方向によっては前) に新しいアイテムを配置します。
彼らがセッションで言ったように、終わりのあるアプローチを使うべきではありません。セッションで述べたように、人々はある時点で間違いなく優位性を見つけるでしょう。
はい、あなたはこれを行うことができます。collectionView:numberOfItemsInSection:に対して非常に大きな数値を返し、collectionView:cellForItemAtIndexPath:で、mod演算子を使用して、0からデータ配列の最後のインデックスまでのindexPath.Rowの数値を常に返します。したがって、配列に20個のアイテムがある場合、次のようになります。
item.whatever.text = [self.theData objectAtIndex:indexPath.row %20];
双方向の無限スクロールを有効にするには、このメソッドをオーバーライドします。コンテンツが中心から離れすぎて、ユーザーが最後まで到達しない場合は常にコンテンツを中心に配置します。
-(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);
}
}
トリッキーな解決策を提供してくれた 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;
}
// 選択した
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"Index path is %d", indexPath.row%self.dataArray.count);
}
これにより、無限スクロール効果が得られます。両側の無限スクロールを有効にするには、ViewWillAppear で ScrolltoIndexpath:(Itemscount の中央) を使用します!! これが、無限スクロール UICollectionView を構築しようとしている人に役立つことを願っています。