2013-09-27 3 views
6

Ich versuche, die nächste Seite der Bilder automatisch zu laden, wenn der Benutzer zum Ende der ersten Seite der Bilder in UICollectionView scrollt. UITableView (iOS 6) verfügt über refreshControl für ähnliche Zwecke ("Pull to refresh"), die zum Aktualisieren oder Ähnlichem verwendet werden können. Gibt es eine ähnliche Option für UICollectionView?Erkennen von Pullup oder Ziehen von UICollectionView

Gibt es eine Möglichkeit zu erkennen, dass eine UICollectionView über die letzte Zeile der Zellen gezogen wird, oder wenn es die Fußzeile anzeigt (die unter der letzten Zeile der Zellen ist). Diese Aktion kann dann verwendet werden, um meine Methode zum Laden der nächsten Seite von Bildern auszulösen.

+0

Ich glaube, das helfen kann: http://stackoverflow.com/questions/18140665/detect-user-dragging-items-out-of-uicollectionview – zeantsoi

Antwort

21

Da Auflistungsansichten von UIScrollView erben, können Sie Delegatmethoden für Bildlaufansichten implementieren, um die Bildlaufbewegung zu erkennen. Sie können beispielsweise scrollViewDidScroll implementieren und die Eigenschaft contentOffset verwenden, um zu messen, wie weit der Benutzer gescrollt hat.

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

Hoffe, das hilft!

+1

Danke, es funktioniert. – kzia

1

Eine weitere Option besteht darin, einfach das nächste Bild oder die nächsten Bilder zu laden, sobald eine bestimmte Zelle angefordert wird. Zum Beispiel, wenn Sie wollen einfach nur sicher 10 Sie Vorbelastung zu einer Zeit, Bilder machen ...

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

Die Vorspannung Methode würde dann nichts tun, wenn die Bilder angefordert wurden oder existieren, oder eine Anfrage zu starten.

4

Zuerst müssen wir erkennen, ob die Sammlungsansicht einen bestimmten Bildlaufprozentsatz passiert hat, und falls dies der Fall ist, wird mit dem Laden der nächsten Seite begonnen. Siehe unten:

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