UICollectionViewCell se oculta = SÍ

Estoy intentando implementar un "desplazamiento sin fin" con UICollectionView .

Lo hago almacenando mi matriz de datos como en este tutorial

y luego implementando the didEndDisplayingCell de UICollectionViewDelegate de la siguiente manera:

 - (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{ if (self.galleryArray.count > 0) { NSIndexPath *newIndexPath = indexPath; if (self.specialHeaderView.bannerView.scrollDirection == left) { newIndexPath = [NSIndexPath indexPathForItem:indexPath.row - 1 inSection:indexPath.section]; } else if (self.specialHeaderView.bannerView.scrollDirection == right) { newIndexPath = [NSIndexPath indexPathForItem:indexPath.row + 1 inSection:indexPath.section]; } if (newIndexPath.row == (self.galleryArray.count - 1)) { // user is scrolling to the right from the last item to the 'fake' item 1. // reposition offset to show the 'real' item 1 at the left-hand end of the collection view newIndexPath = [NSIndexPath indexPathForItem:1 inSection:indexPath.section]; [self.bannerCollectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; return; } // if (scrollView.contentOffset.x == self.collectionView.frame.size.width) { if (newIndexPath.row == 0) { // user is scrolling to the left from the first item to the fake 'item N'. // reposition offset to show the 'real' item N at the right end end of the collection view newIndexPath = [NSIndexPath indexPathForItem:([self.galleryArray count] -2) inSection:indexPath.section]; [self.bannerCollectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; } } 

}

El problema es que cada didEndDisplayingCell que se llama al método didEndDisplayingCell y la vista de colección solicita una celda a través del método delegate CellForItemAtIndexPath , la celda vuelve a estar oculta.

Aquí está mi implementación CellForItemAtIndexPath :

 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { SpecialBannerCell *specialBannerCell = (SpecialBannerCell *)[collectionView dequeueReusableCellWithReuseIdentifier:GalleryCellIdentifier forIndexPath:indexPath]; if (specialBannerCell.hidden) { } Benefit *benefit = [self.galleryArray objectAtIndex:indexPath.row]; [specialBannerCell.imageBanner setImageWithURL:[NSURL URLWithString:benefit.imageIphoneUrl] placeholderImage:[UIImage imageNamed:@"photo_loader"]]; return specialBannerCell; 

}

¿Qué estoy haciendo mal aquí?

Así que no estoy seguro de por qué, pero cuando utilicé los methods UIScrollViewDelegate en lugar del método didEndDisplayingCell, la celda del método ya no está oculta y todo funciona perfectamente.

 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { if (self.galleryArray.count > 0) { NSIndexPath *indexPath = self.currentIndexPath; NSIndexPath *newIndexPath = indexPath; if (newIndexPath.row == (self.galleryArray.count - 1)) { // user is scrolling to the right from the last item to the 'fake' item 1. // reposition offset to show the 'real' item 1 at the left-hand end of the collection view newIndexPath = [NSIndexPath indexPathForItem:1 inSection:indexPath.section]; self.currentIndexPath = newIndexPath; [self.bannerCollectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; return; } if (newIndexPath.row == 0) { // user is scrolling to the left from the first item to the fake 'item N'. // reposition offset to show the 'real' item N at the right end end of the collection view newIndexPath = [NSIndexPath indexPathForItem:([self.galleryArray count] -2) inSection:indexPath.section]; self.currentIndexPath = newIndexPath; [self.bannerCollectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; } } 

}