Ich habe ein scrollendes Raster von Fotos, das so aussieht und funktioniert wie der Foto-Picker auf dem iPhone. Es wird aus einer UITableView erstellt, die eine benutzerdefinierte UITableViewCell verwendet, die eine Reihe von Fotos anzeigt (sehr ähnlich wie Three20 es implementiert).Verbessern Sie die UITableView Scroll-Leistung beim Laden von Bildern
Es funktioniert gut, außer dass Scroll-Leistung ist schlecht. Ich befolge bereits die meisten Best Practices für schnelles UITableView-Scrollen (à la Tweetie).
Die Bilder sind alle mit der App gebündelt. Ich lade sie bei Bedarf auf dem UI-Thread. Ich nutze imageNamed von UIImage: Damit werden die Bilder nach dem ersten Laden zwischengespeichert. Sobald ich einmal durch die Tabellenansicht gescrollt habe, scrollt es sehr flüssig.
Das Problem ist, das erste Scrollen durch die Tabellenansicht, Scrolling ist nervös. Ich habe die App profiliert und festgestellt, dass die meiste Zeit damit verbracht wird, die Bilder aus dem Dateisystem zu laden. Sie sind JPEG-Bilder, bereits korrekt (klein). Ich habe versucht, stattdessen PNG-Bilder zu verwenden, aber die Leistung verbessert sich nicht sehr.
Der iPhone Photo Picker weist eine viel bessere Ladeleistung auf. Ich frage mich, ob das Kombinieren aller Fotos zu einem einzelnen Bild, das ich einmal lade und dann in kleinere Bilder aufspalte, schneller wäre. Es funktioniert sicherlich in Spielen, aber ich weiß, das ist wirklich eine ganz andere Geschichte. Hat jemand Erfahrung damit gemacht?
Weitere Ideen, wie ich die Leistung verbessern kann?
Übrigens habe ich ein ähnliches, wenn auch weniger Leistungsproblem für ein anderes UITableView, das nur Standard-UITableViewCells mit einem Bild verwendet, das dem ImageView pro Zeile zugewiesen ist.
Ich habe beide Techniken ausprobiert: Pre-Caching und Async-Laden. Das Async-Laden sah schrecklich aus, da die Bilder alle so schnell laden, aber langsam genug für ein auffälliges Flimmern. Pre-Caching hat super funktioniert. Ich mache mir Sorgen darüber, was passiert, wenn ich in ein paar Monaten 350 Bilder vorcachen muss (ich muss derzeit nur 100 vorcachen), aber ich werde diese Brücke überqueren, wenn ich dazu komme. Danke für die tolle Antwort. –
Gern geschehen! Beim asynchronen Laden sieht es möglicherweise besser aus, wenn Sie kein Platzhalterbild haben, sondern nur einen leeren Bereich, in dem das Bild angezeigt wird.Das könnte das Flackern verhindern. –