Wie kann ich in einem UIImageView eine progressive JPEG anzuzeigen, während es heruntergeladen wird?
-
12-10-2019 - |
Frage
aus dem Netz ein Bild heruntergeladen und in einem UIImageView zeigt ist ziemlich einfach. Dies ist jedoch das Bild erfordert vollständig heruntergeladen werden, bevor sie den Benutzer angezeigt wird, vollständig progressive JPEG (und PNG) Bilder zu besiegen.
Wie kann ich die teilweise heruntergeladenen Bilder machen, während die Übertragung geschieht? Ich könnte mir vorstellen, das SDK eine Callback-Funktion zu haben, die das Bild aktualisieren würde, aber ich kann nicht eine solche Funktion finden. Ist es möglich, auf alle mit der aktuellen iOS SDK?
Lösung
Haben Sie versucht, die UIImage teilweise zu machen, wie didReceiveData ... genannt wird? So etwas wie ...
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//TODO: add some error handling in case the image could not be created
UIImage *img=[UIImage imageWithData:data];
if (img) {
self.imageView.image=img;
}
}
Andere Tipps
Ich weiß, dass dieser Beitrag hat etwa 1 Jahr, aber nur für den Fall, dass jemand für sie sucht, gibt ein Projekt namens NYXImagesKit das tut, was Sie suchen.
Es hat eine Klasse mit dem Namen NYXProgressiveImageView
die eine Unterklasse von UIImageView
ist.
Alles, was Sie tun müssen, ist:
NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init];
imgv.frame = CGRectMake(0, 0, 320, 480);
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]];
[self.view addSubview:imgv];
[imgv release];
Auch eine gute Möglichkeit ist, Ihre Bilder als interlaced
zu speichern, so dass es Lasten mit geringer Qualität und verbessern mit dem Download. Wenn das Bild nicht interlaced es von oben nach unten geladen wird.
Es gibt jetzt eine kleine Open-Source-Bibliothek oben auf libjpeg-turbo, die leicht Dekodierung und Anzeige von progressiven JPEGs können:
let imageView = CCBufferedImageView(frame: ...)
if let url = NSURL(string: "http://example.com/yolo.jpg") {
imageView.load(url)
}
finden Sie unter https://github.com/contentful-labs/Concorde