UICollectionView con desplazamiento infinito?

Estoy intentando implementar una vista de colección con un comportamiento de desplazamiento infinito. El desplazamiento debe ser circular, como en un UIPickerView . ¿Se puede hacer con UICollectionView de Apple o no hay otra opción que crear una PickerView horizontal?

¿Qué piensas?

Debería ver el video de session WWDC 2011 "Advanced ScrollView Techniques", que habla de desplazamiento infinito, y estoy bastante seguro de que es posible usar eso con UICollectionView . Reciente mientras se desplaza y coloca los nuevos elementos después de los elementos visibles actuales (o antes, según la dirección de desplazamiento).

Como dicen en la session, no debes usar un enfoque que tenga un final. Como se dijo en la session: La gente definitivamente encontrará la ventaja en un momento.

Sí, usted puede hacer esto. Devuelve un número muy grande para collectionView: numberOfItemsInSection :, y en collectionView: cellForItemAtIndexPath :, usa el operador mod para devolver siempre un número para indexPath.Row que está entre 0 y el último índice en tu matriz de datos. Entonces, si tuviera 20 elementos en su matriz, haría algo como esto:

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

Anule este método para habilitar el desplazamiento infinito en ambos sentidos. Centra el contenido cada vez que está demasiado lejos del centro y el usuario nunca llega al final.

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

Gracias a rdelmar por una solución difícil. Esa idea de "gran número para collectionView: numberOfItemsInSection" funcionó como un encanto. He intentado implementar el mismo con los methods delegates de UIScrollView. Pero la salida fue desigual.

Aquí hay una parte de mi código.

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

}

Esto le dará un efecto de desplazamiento infinito. Para habilitar el desplazamiento infinito en ambos lados, use ScrolltoIndexpath: (centro de Itemscount) en ViewWillAppear !! Espero que esto ayude a alguien que está a punto de build un UICollectionView de desplazamiento infinito.