Comment afficher un JPEG progressif dans un UIImageView alors qu'il est en cours de téléchargement?
-
12-10-2019 - |
Question
Téléchargement d'une image du filet et le montrer dans un UIImageView est assez facile. Cependant, cela nécessite l'image à télécharger complètement avant qu'elle ne soit présentée à l'utilisateur, défaisant complètement les images JPEG progressives (et PNG).
Comment puis-je rendre les images téléchargées partiellement alors que le transfert est fait? J'imagine le SDK d'avoir une fonction de rappel qui mettrait à jour l'image, mais je ne peux pas trouver une telle fonction. Est-il possible du tout avec le courant iOS SDK?
La solution
Avez-vous essayé de rendre la partie UIImage comme didReceiveData est appelé ...? Quelque chose comme ...
-(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;
}
}
Autres conseils
Je sais que ce post a environ 1 an, mais juste au cas où quelqu'un est à la recherche, il y a un projet appelé NYXImagesKit qui fait ce que vous recherchez.
Il a une classe nommée NYXProgressiveImageView
qui est une sous-classe de UIImageView
.
Tout ce que vous avez à faire est:
NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init];
imgv.frame = CGRectMake(0, 0, 320, 480);
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]];
[self.view addSubview:imgv];
[imgv release];
En outre, une bonne option est d'enregistrer vos images interlaced
afin qu'il charge de faible qualité et améliorer le téléchargement. Si l'image n'entrelacée est chargé de haut en bas.
Il y a maintenant une petite bibliothèque open source sur le dessus de libjpeg-turbo qui permet le décodage et l'affichage progressif facilement les fichiers JPEG:
let imageView = CCBufferedImageView(frame: ...)
if let url = NSURL(string: "http://example.com/yolo.jpg") {
imageView.load(url)
}