Verbessern UITableView-scrolling-performance beim laden von Bilder
Ich habe einen Bildlauf raster von Fotos, die aussieht und funktioniert ziemlich genau, wie die Fotoauswahl auf dem iPhone. Es ist konstruiert aus einem UITableView, die nutzt eine custom UITableViewCell das zeigt eine Reihe von Fotos (sehr ähnlich wie Three20 implementiert).
Es funktioniert Super, außer, dass die scrolling-performance ist schlecht. Ich bin bereits folgende die meisten die best practices für die schnelle UITableView scrollen (à la Tweetie).
Die Bilder sind alle gebündelt mit der app. Ich laden Sie Sie auf dem UI-thread auf Nachfrage. Ich benutze UIImage ist imageNamed: so, dass die Bilder zwischengespeichert werden, nachdem Sie zum ersten mal geladen wird. Einmal ich habe einen Bildlauf durch die Tabelle wird einmal, es scrollt sehr glatt.
Das problem ist, die erste Zeit mit scrollen durch die Tabelle anzuzeigen, scrollen ist nervös. Ich habe ein Profil der app und fand, dass der Großteil der Zeit wird für das laden der images aus dem Dateisystem. Sie sind JPEG-Bilder, die bereits richtig dimensioniert (zu klein). Ich habe versucht, mit PNG-Bilder statt, aber die Leistung nicht verbessern, sehr viel.
Dem iPhone-Foto-picker Exponate viel besser einlegen Leistung. Ich Frage mich, ob die Kombination aller Fotos in einem einzigen Bild, das ich laden einmal und dann teilen sich in kleinere Bilder werden schneller. Es funktioniert sicherlich in den spielen, aber ich weiß, dass ist wirklich eine ganz andere Geschichte. Hat jemand schon Erfahrung damit?
Andere Ideen, wie ich die Leistung verbessern können?
Übrigens, ich habe eine ähnliche, wenn auch weniger, performance-Problems für ein anderes UITableView, die nur verwendet standard-UITableViewCells mit einem Bild zugewiesen, um die Bildansicht pro Zeile.
InformationsquelleAutor Hilton Campbell | 2011-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Sache, zu versuchen sein könnte pre-caching alle die Bilder, wenn die Ansicht geladen. Darüber hinaus, vielleicht laden die Bilder im hintergrund (auch wenn es dem laden vom Dateisystem und nicht im web). Ich habe nicht versucht, diese selbst, aber vielleicht könnten Sie so etwas wie https://github.com/rs/SDWebImage und haben die URLs zeigen auf das Dateisystem. Benutzer könnten einige Platzhalter Bilder auf den ersten, aber dann die UI würde nicht Stottern, während die Bilder geladen werden.
Sie sind herzlich willkommen! Für das asynchrone laden, könnte es besser Aussehen, wenn Sie nicht über ein Platzhalter-Bild, sondern einfach nur eine leere Fläche, wo das Bild erscheinen wird. Das könnte verhindern, dass die flackern.
InformationsquelleAutor Costa Walcott
Einstellung der PagingEnabled-Eigenschaft auf off verbessert die Scroll-performance.
InformationsquelleAutor Sharme
Ich hatte ein ähnliches Problem mit einem
UITableView
zum anzeigen von Informationen analysiert, die aus einem RSS-Feed. Ich lief in die scrolling-performance-Probleme, wenn es eine erhebliche Menge von Daten. Aber ich arbeite noch daran ich auszusetzen die Analyse, wenn die Tabelle gescrollt wird. Es wird fortgesetzt, wenn das scrollen Stoppt. Ich bin nicht an meinem Rechner, aber ich glaube, ich verwendettableViewDidScroll
undtableViewDidEndDecelerating
. Sie können überprüfen, diese tableview delegates. In jedem Fall funktioniert es sehr gut, ich brauche nur ein eleganter Weg, um pause meine Analyse.[NSThread setThreadPriority:0]
). Ich fand, dass funktioniert wirklich gut für mich, und es könnte Ihr problem lösen mehr aus als gut.InformationsquelleAutor Joe Fratianni
Fantastisch. Das funktioniert wie ein Charme! So effizient landete ich mit insertRowAtIndexPath eher, dass das laden der Tabelle. Nun es verhält sich, wie es
Vielen Dank!
Joe
InformationsquelleAutor Joe Fratianni