iOS UIScrollView Lazy Loading
ich Frage mich nur, wenn jemand erklären könnte, diesen code für mich, so kann ich eigentlich von Ihr lernen. Ich versuche, meine app einen scroller, die Schriftrollen von Links nach rechts mit einer Menge Bilder (aus dem internet), aber die Sache ist, es müssen lazy loading. so habe ich einige tutorials und herausgefunden, wie es zu tun, aber ich wirklich don ' T verstehen es. Ich hatte gehofft, irgendeine Art Seele, der erklären würde, wie lazy load step by step
Dies ist der code, den ich gelernt hatte, aus den tutorials:
-(void)scrollViewDidScroll:(UIScrollView *)myScrollView {
/**
* calculate the current page that is shown
* you can also use myScrollview.frame.size.height if your image is the exact size of your scrollview
*/
int currentPage = (myScrollView.contentOffset.y / currentImageSize.height);
//display the image and maybe +/-1 for a smoother scrolling
//but be sure to check if the image already exists, you can do this very easily using tags
if ( [myScrollView viewWithTag:(currentPage +1)] ) {
return;
}
else {
//view is missing, create it and set its tag to currentPage+1
}
/**
* using your paging numbers as tag, you can also clean the UIScrollView
* from no longer needed views to get your memory back
* remove all image views except -1 and +1 of the currently drawn page
*/
for ( int i = 0; i < currentPages; i++ ) {
if ( (i < (currentPage-1) || i > (currentPage+1)) && [myScrollView viewWithTag:(i+1)] ) {
[[myScrollView viewWithTag:(i+1)] removeFromSuperview];
}
}
}
- Sie ersparen sich eine Menge Schmerzen und Blick auf das Apple-Beispiel-code, wird Ihnen zeigen, wie zu implementieren, eine "Unendliche Scrollen" scroller, der lädt Bilder auf als erforderliche basis. Ich denke, dies ist die URL, aber der Dateiname ist InfiniteScrollView.m - developer.apple.com/library/ios/#samplecode/StreetScroller/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Über Lazy loading auf scrollView, ich würde es sehr zu empfehlen, UITableView statt. Apple hat einen tollen job mit einer Leistung, die auf diese Komponente.
Können Sie horizontale (siehe diese EasyTableView code, es funktioniert Super) und stoppen Sie die-Seite-Modus, wenn Sie möchten, eine kontinuierliche scrollen (pagingEnabled = NEIN;) so werden Sie in der Lage, das Verhalten, die Sie suchen.
Lazy loading ist im Grunde Holen, die große Teile der Daten (sprich Bilder in diesem Beispiel) nur, wenn Sie Sie benötigen. In Ihrem code, müssen Sie einen Delegaten-Methode, die aufgerufen wird, wenn Sie Blättern ein UIScrollView.
Die -(void)scrollViewDidScroll:(UIScrollView *)myScrollView Funktion entscheidet, Wann bekommt man eigentlich Daten. So wie Ihr das scrollen, finden Sie heraus, wo Sie sind in der scroll-Ansicht (sagen wir, du hast 10 Bilder, die Sie laden möchten-Sie möchten wissen, ob der Bildschirm zeigt derzeit Bild Nummer 1, 2, 3, etc.). Dies ist, was die currentPage-integer hält.
Nun, Sie wissen, welche Seite Sie gerade sehen, wir wollen, um tatsächlich Holen Sie sich das Bild an.
Der obige code prüft, ob das Bild NACH dem Bild der person wird derzeit existiert (daher die currentPage + 1). Wenn es funktioniert, haben wir bereits geholt, und wir beenden die Funktion. Ansonsten:
Hier, wir faul, das Bild laden. Dies geschieht zum Beispiel, indem du einen neuen thread und Download des Bildes von einem server. Wir tun dies, während die Aussicht ist nicht die currentPage weil wir nicht wollen, das Bild zu "pop-in", während der Benutzer scrollen. Die Ansicht, auf die wir hinzufügen, das Bild bekommt ein tag (UIView hat ein "tag" - Eigenschaft); wir setzen den tag zu currentPage+1, das uns erlaubt, das indizieren der Ansicht, falls wir es brauchen.
Schließlich haben wir:
Hier nutzen wir unsere currentPage Variablen und Durchlaufen alle unsere Ansichten von der Indizierung von Ihnen durch den tag, die wir setzen. Wenn der tag nicht einer aus dem currentPage (Sie erinnern sich, wir wollen keine pop-in!) wir entfernen Sie Sie aus der scrollview und etwas Speicher.
Hoffe, das hat geholfen.
Vielleicht dies wird Ihnen helfen.
Downloads die Asynchrone Bildansicht Dateien von hier https://github.com/nicklockwood/AsyncImageView/ und fügen Sie Sie in Ihr Projekt.
Ziehen Sie die Bildansicht auf xib-Datei und ändern Sie die Klasse, um AsynchronousImageView eher als UIImageView
Schreiben dieser in Sie .h-Datei
IBOutlet AsynchronousImageView *_artworkImg;
Schreiben Sie diese in Ihr .m-Datei
[_artworkImg loadImageFromURLString:@"Deine Bild Url"];