Das Laden von Bildern von der Festplatte in der iPhone App ist langsam

8

In meiner iPhone-App verwende ich die Kamera des iPhones, um ein Foto aufzunehmen und es zu speichern (den Ordner für Dokumente der Anwendung). So speichere ich es:

%Vor%

Mit der größten Komprimierung würde ich das Bild schnell von der Festplatte lesen. Aber es ist nicht! Ich verwende das Bild als Hintergrundbild für eine Schaltfläche in einer meiner Ansichten. Ich lade es so:

%Vor%

Wenn ich mit dieser Schaltfläche zur Ansicht navigiere, ist sie langsam und abgehackt. Wie behebe ich das?

    
user1007895 04.11.2011, 22:04
quelle

3 Antworten

37

+imageWithContentsOfFile: ist synchron, daher wird die Benutzeroberfläche Ihres Haupt-Threads blockiert, da das Image vom Disk-Betrieb geladen wird und die Funkfreudigkeit verursacht. Die Lösung besteht darin, eine Methode zu verwenden, die die Datei asynchron von der Festplatte lädt. Sie können dies auch in einem Hintergrundthread tun. Dies kann einfach durch das Umschließen des +imageWithContentsOfFile: in dispatch_async() und dann eines verschachtelten dispatch_async() in der Hauptwarteschlange geschehen, die -setBackgroundImage: umschließt, da UIKit-Methoden im Hauptthread ausgeführt werden müssen. Wenn das Bild unmittelbar nach dem Laden der Ansicht angezeigt werden soll, müssen Sie das Bild vorab von der Festplatte zwischenspeichern, damit es sofort im Speicher ist, wenn die Ansicht angezeigt wird.

%Vor%

Wenn das Schaltflächenabbild einen Verlauf aufweist, sollten Sie die folgenden Eigenschaften in Betracht ziehen, um sicherzustellen, dass die von der Platte geladene Abbilddatei winzig ist:

%Vor%

oder (veraltet, nur zu verwenden, wenn Sie iOS 4.x unterstützen müssen):

%Vor%     
Andrew 04.11.2011, 22:27
quelle
2

Das ist der schnellere Weg, den ich kenne. Sie müssen #import <ImageIO/ImageIO.h>

importieren

Ich verwende diesen Code zum Herunterladen und Komprimieren von Bildern während eines Bildlaufs, in einem Bildlauf und Sie bemerken kaum die Verzögerung.

%Vor%     
Ivan Carosati 05.11.2011 00:11
quelle
0

Ich stehe vor einem sehr ähnlichen Problem, bei dem ich Hunderte von Bildern aus dem Verzeichnis laden musste. Meine Leistung war ziemlich langsam, wenn ich die Methode UIImage (contentsOfFile :) verwendete. Die folgende Methode erhöhte meine Leistung auf 70%.

class ImageThumbnailGenerator: ThumbnailGenerator {        private let URL: URL

%Vor%     
Amrit Sidhu 08.03.2018 07:27
quelle

Tags und Links