das laden von Bildern von der Festplatte in iPhone app ist langsam
In der app " mein iPhone, ich bin mit der iPhone-Kamera ein Foto aufnehmen und speichern Sie es tun Festplatte (die Anwendung Dokumente-Ordner). Dies ist, wie ich es speichern:
[UIImageJPEGRepresentation(photoTaken, 0.0) writeToFile:jpegPath atomically:YES];
Mit der meisten Kompression, dachte ich, Lesen die Bild von der Festplatte wäre schnell. Aber seine nicht! Ich benutze das Bild als Hintergrundbild für einen button in einer meiner Ansichten. Ich laden Sie es wie folgt:
[self.frontButton setBackgroundImage:[UIImage imageWithContentsOfFile:frontPath] forState:UIControlStateNormal];
Wenn ich navigieren Sie zu der Ansicht mit diesem Knopf, es ist langsam und abgehackt. Wie kann ich dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
+imageWithContentsOfFile:
ist die synchrone, also die Benutzeroberfläche, die auf Ihrem Haupt-thread blockiert ist durch das laden der Bilder von der Festplatte Betrieb, wodurch die Bewegtheit. Die Lösung ist die Verwendung einer Methode für das laden der Datei asynchron von der Festplatte. Sie könnte auch dazu in einem hintergrund-thread. Dies kann leicht getan werden, indem er die+imageWithContentsOfFile:
imdispatch_async()
, dann eine verschachteltedispatch_async()
auf der Haupt-Warteschlange, wraps-setBackgroundImage:
seit UIKit Methoden ausgeführt werden müssen, die auf den Haupt-thread. Wenn Sie wollen das Bild angezeigt wird, unmittelbar nach der view geladen wird, werden Sie brauchen, um pre-cache das Bild von der Festplatte, so dass es die in-memory-sofort, wenn die Ansicht angezeigt wird.Als beiseite, wenn Sie die Taste Bild passiert, einen Farbverlauf, sollten Sie die folgenden Eigenschaften, um sicherzustellen, die image-Datei vom Datenträger geladen ist winzig:
oder (nicht empfohlen, nur verwenden, wenn Sie brauchen, um Unterstützung für iOS 4.x):
UIKit
Klassen auf hintergrund-threads.Because image objects are immutable, you cannot change their properties after creation. Most image properties are set automatically using metadata in the accompanying image file or image data. The immutable nature of image objects also means that they are safe to create and use from any thread.
Dies ist der schnellere Weg, die ich kenne. Sie müssen importieren
#import <ImageIO/ImageIO.h>
Ich diesen code verwenden, um download und Bilder komprimieren, während eine schriftrolle, in einem scrollview und Sie kaum bemerken, die Verzögerung.
Ich vor einem ähnlichen Problem, wo ich laden Sie Hunderte Bilder aus dem Verzeichnis. Meine Leistung war ziemlich langsam, wenn ich verwendet, UIImage(contentsOfFile:) - Methode. Die unter-Methode erhöhte meine Leistung zu 70 %.
Klasse ImageThumbnailGenerator: ThumbnailGenerator {
private lass url: URL