ios - Detectando pull-up o arrastre de UICollectionView
objective-c ios6 (3)
Otra opción es simplemente cargar la siguiente imagen o conjunto de imágenes una vez que se solicite una celda específica. Por ejemplo, si solo quiere asegurarse de que está precargando imágenes de 10 en 10 ...
if (indexPath.row % 10 == 0)
[self preloadImagesStartingAt:indexPath.row + 10 count:10];
El método de precarga no haría nada si las imágenes han sido solicitadas o existen, o inicia una solicitud.
Estoy intentando encontrar una manera de cargar automáticamente la página siguiente de imágenes cuando el usuario se desplaza al final de la primera página de imágenes en UICollectionView. UITableView (iOS 6) tiene refreshControl para fines similares ("Pull to refresh") que se puede utilizar para actualizar, o algo similar. ¿Hay una opción similar disponible para UICollectionView?
¿Hay alguna manera de detectar que un UICollectionView está siendo arrastrado más allá de la última línea de celdas, o si está mostrando el pie de página (que está debajo de la última línea de celdas). Esta acción se puede usar para activar mi método para cargar la página siguiente de imágenes.
Primero, debemos detectar si la vista de colección ha pasado un cierto porcentaje de desplazamiento y, si es así, comenzar a cargar la página siguiente. Vea abajo:
// Outside the implementation block:
static const CGFloat kNewPageLoadScrollPercentageThreshold = 0.66;
static BOOL ShouldLoadNextPage(UICollectionView *collectionView)
{
CGFloat yOffset = collectionView.contentOffset.y;
CGFloat height = collectionView.contentSize.height - CGRectGetHeight(collectionView.frame);
return yOffset / height > kNewPageLoadScrollPercentageThreshold;
}
// Inside the implementation block:
#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView
didEndDisplayingCell:(UICollectionViewCell *)cell
forItemAtIndexPath:(NSIndexPath *)indexPath
{
BOOL shouldLoadNextPage = ShouldLoadNextPage(collectionView);
if (shouldLoadNextPage && !_pageLoading) {
[self _loadNextPage];
}
}
Como las vistas de colección heredan de UIScrollView
, puede implementar métodos delegados de vista de desplazamiento para detectar el movimiento de desplazamiento. Por ejemplo, puede implementar scrollViewDidScroll
y usar la propiedad contentOffset
para medir qué tan lejos se ha desplazado el usuario.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat offsetY = scrollView.contentOffset.y;
CGFloat contentHeight = scrollView.contentSize.height;
if (offsetY > contentHeight - scrollView.frame.size.height)
{
//start loading new images
}
}
¡Espero que esto ayude!