2013-09-27 3 views
6

Sto tentando di trovare un modo per caricare automaticamente la pagina successiva di immagini quando l'utente scorre fino alla fine della prima pagina di immagini in UICollectionView. UITableView (iOS 6) ha refreshControl per scopi simili ("Pull to refresh") che può essere usato per aggiornare, o qualcosa di simile. Esiste un'opzione simile disponibile per UICollectionView?Rilevamento di pull-up o trascinamento di UICollectionView

C'è un modo per rilevare che un UICollectionView viene trascinato oltre l'ultima riga di celle o se sta visualizzando il piè di pagina (che si trova sotto l'ultima riga di celle). Questa azione può quindi essere utilizzata per attivare il metodo per caricare la pagina successiva di immagini.

+0

che questo possa aiutare: http://stackoverflow.com/questions/18140665/detect-user-dragging-items-out-of-uicollectionview – zeantsoi

risposta

21

Poiché le viste di raccolta ereditano da UIScrollView, è possibile implementare metodi di delega della vista di scorrimento per rilevare il movimento di scorrimento. Ad esempio, è possibile implementare scrollViewDidScroll e utilizzare la proprietà contentOffset per misurare la distanza di scorrimento dell'utente.

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

Spero che questo aiuti!

+1

Grazie, funziona. – kzia

1

Un'altra opzione è caricare semplicemente l'immagine successiva o un insieme di immagini dopo aver richiesto una cella specifica. Ad esempio, se si desidera solo per rendere le immagini che si sta precarico 10 alla volta ...

if (indexPath.row % 10 == 0) 
    [self preloadImagesStartingAt:indexPath.row + 10 count:10]; 

Il metodo di precaricamento allora non fare nulla se le immagini sono state richieste o esiste, o avviare una richiesta.

4

Per prima cosa è necessario rilevare se la vista di raccolta ha superato una certa percentuale di scorrimento e, in caso affermativo, iniziare a caricare la pagina successiva. Vedere di seguito:

// 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]; 
    } 
}