Ich benutze UICollectionView
+ AFNetworking 2
um Bilder asynchron von einem Webservice zu laden. Es funktioniert großartig. Wie implementiere ich jedoch das automatische Scrollen (wenn der Benutzer den unteren Rand der Seite erreicht oder in dessen Nähe, wird die API aufgerufen, um mehr Zellen zu holen).
Ich habe viele Beispiele gesehen, aber es scheint keine Best Practice zu geben. Zum Beispiel schlug ein Tutorial scrollViewDidScroll
vor, das aber jedes Mal aufgerufen wird, wenn die Ansicht gescrollt wird. Ist das die richtige Umsetzung?
PS. Ich schreibe in Swift.
Hier ist mein Code zur Zellenerstellung:
%Vor% Sie könnten dies in einer scrollViewDidScroll
-Delegatenmethode oder collectionView:cellForItemAtIndexPath:
tun (hier könnten Sie feststellen, dass die letzte Zelle geladen wird). Was Sie tun müssten, ist einen Wrapper für AFNetworking
call zu erstellen, um zu verhindern, dass die Daten einige Male geladen werden (irgendeine Art von Flag, die anzeigt, dass sie bereits geladen wird).
Danach können Sie eine zusätzliche Zelle mit einer Art Aktivitätsanzeige am unteren Rand einfügen und sie entfernen, nachdem AFNetworking
call beendet ist.
Sie sollten die delegemethode willEndDragging UIScrollview verwenden, um zu bestimmen, wo der scrollview den Bildlauf stoppt.
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
Dies hat mehrere Vorteile gegenüber den anderen Methoden:
Verwenden Sie im WillEndDragging den Inhaltsoffset target , um festzustellen, ob mehr Ergebnisse geladen werden müssen. Sobald Ihre API mit dem Abrufen von Daten fertig ist, rufen Sie reloadData einfach in der Sammlungsansicht auf und die neuen Ergebnisse werden angezeigt. Beachten Sie, dass das Ziel contentOffset ein Zeiger ist. Sie müssen daher targetContentOffset->y
verwenden, um die Zielposition y zu erhalten.
Der eigentliche Code dafür wird von der Implementierung abhängig sein, also gebe ich kein Beispiel ein, aber es sollte einfach genug sein, um zu kodieren.
Ja, verwenden Sie scrollViewDidScroll
, um zu prüfen, ob Sie sich am Ende befinden, als die Arbeit auszuführen, die Sie benötigen (Ladeprogramm platzieren, Daten laden usw.).
Sie können die fertige Komponente SVInfiniteScrolling verwenden (die Teil von SVPullToRefresh ist). Oder schauen Sie sich die Implementierung an , um inspiriert zu werden.
Glückliche Kodierung!
Ich verwende diesen Code in meinem Projekt. Ich habe es mit Obj-C geschrieben und weiß nicht genug, um es in Swift umzuwandeln. Wenn Sie also konvertieren können, können Sie selbst feststellen, ob der Benutzer das Ende der Seite erreicht hat;
%Vor%Tags und Links objective-c ios swift afnetworking