Es gibt viele Fragen zum asynchronen Laden von Bildern und anderen heruntergeladenen Daten. Es gibt jedoch keine Fragen zum asynchronen Laden dieser Bilder (sobald sie heruntergeladen wurden) in die Benutzeroberfläche.Laden Sie alle Zelleninhalte asynchron
Ich versuche 60 fps Scrollen auf meinem UICollectionView zu erreichen, obwohl ich nach einer Lösung suche, die für alle Ansichten funktioniert.
Wenn ich zum Beispiel Bilder in meinem Assets-Ordner habe, die ich in ein schnell scrollendes UIScrollView laden möchte, dauert es einige Zeit, bis sie in den Speicher geladen und auf der Benutzeroberfläche gezeichnet wurden. Gibt es eine Möglichkeit, diese Bilder zuerst im Speicher zwischenzuspeichern (ohne dabei den Speicher zu beschädigen/zu viel zu verwenden) und sie dann in die Zellen zu laden, sobald sie im Speicher zwischengespeichert sind?
Wie ich es jetzt verstehen, wenn ich sage,
cell.imageView.image = UIImage(named: "grapes")
das Vermögen Ordner grapes
geöffnet und gelesen von, und dann bringt sie das entsprechende Bild (1x, 2x oder 3x) in dem Speicher. Nachdem das korrekte Bild in den Speicher geladen wurde, wird ihm cell.imageView.image
zugewiesen und dann wird das Bild gezeichnet. Ist das genau? Tritt das alles im Hauptthread auf? Wenn ja, hat das nicht die Möglichkeit, den Haupt-Thread zu verstopfen und das Gerät dazu zu bringen, einige Frames zu überspringen?
Ich gehe davon aus, dass ein ähnlicher Prozess auftritt, wenn Sie zum Beispiel komplexe Ausdrücke lösen oder Text formatieren. Wenn ja, kann und wie erstelle ich den Inhalt, der asynchron geladen werden soll, damit der Hauptthread nicht verstopft wird (selbst auf Kosten temporär leerer Inhaltsansichten)?
@Rob, meinst du, dass das UIImageView mehr Operationen für die Skalierung oder etwas anderes ausführen muss? – IHaveAQuestion
Ich habe über eine Bildansicht gesprochen, also 40x40 Punkte, aber Sie verwenden ein Bild mit 1200x1200 Pixel und verwenden einen Inhaltsmodus '.scaleAspectFit' oder' .scaleAspectFill'. Wirklich jede Situation, in der du dich auf contentMode verlässt, um dein Bild angemessen zu skalieren. Oder natürlich, wenn Sie Ihre eigenen Scaling/Cropping Routinen aufrufen. – Rob