Come faccio a visualizzare un JPEG progressivo in un UIImageView mentre viene scaricato?
-
12-10-2019 - |
Domanda
Scaricando un'immagine dalla rete e che mostra in un'UIImageView è abbastanza facile. Tuttavia, questo richiede l'immagine da scaricato completamente prima di essere mostrato all'utente, battendo completamente immagini JPEG progressive (e PNG).
Come faccio a rendere le immagini parzialmente scaricati mentre il trasferimento è stato fatto? Immagino l'SDK per avere qualche funzione di callback che aggiornare l'immagine, ma non riesco a trovare una tale funzione. E 'possibile a tutti con l'attuale iOS SDK?
Soluzione
Hai provato a rendere l'UIImage in parte come didReceiveData viene chiamato ...? Qualcosa di simile ...
-(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;
}
}
Altri suggerimenti
So che questo post ha circa 1 anno, ma solo nel caso in cui qualcuno è alla ricerca di esso, v'è un progetto chiamato NYXImagesKit che fa quello che state cercando.
E 'una classe denominata NYXProgressiveImageView
che è una sottoclasse di UIImageView
.
Tutto quello che dovete fare è:
NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init];
imgv.frame = CGRectMake(0, 0, 320, 480);
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]];
[self.view addSubview:imgv];
[imgv release];
Inoltre, una buona opzione è quella di salvare le immagini in modo che interlaced
carichi informatici con bassa qualità e migliorano con il download. Se l'immagine non è interlacciata viene caricato da cima a fondo.
Ora c'è una piccola libreria open-source in cima libjpeg-turbo che permette la decodifica e la visualizzazione JPEG progressivi facilmente:
let imageView = CCBufferedImageView(frame: ...)
if let url = NSURL(string: "http://example.com/yolo.jpg") {
imageView.load(url)
}