如何在UIImageView正在下载时显示渐进式JPEG?

从网上下载图像并在UIImageView中显示它相当简单。 但是,这需要在向用户显示图像之前完全下载图像,彻底击败渐进式JPEG(和PNG)图像。

如何在传输完成时渲染部分下载的图像? 我可以想象SDK有一些更新图像的callback函数,但是我找不到这样的函数。 目前的iOS SDK有没有可能?

你有没有尝试呈现UIImage的部分,因为没有接受调用… …? 就像是 …

-(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; } } 

我知道这个post大概有一年的时间,但是为了防止有人在寻找,有一个名为NYXImagesKit的项目可以满足你的需求。

它有一个名为NYXProgressiveImageView的类,它是UIImageView一个子类。

你所要做的就是:

 NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init]; imgv.frame = CGRectMake(0, 0, 320, 480); [imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]]; [self.view addSubview:imgv]; [imgv release]; 

此外,一个不错的select是将图像保存为interlaced以便以低质量加载,并通过下载进行改进。 如果图像不是交错的,则从上到下加载。

现在在libjpeg-turbo之上有一个小的开源库,可以轻松地解码和显示渐进的JPEG:

 let imageView = CCBufferedImageView(frame: ...) if let url = NSURL(string: "http://example.com/yolo.jpg") { imageView.load(url) } 

https://github.com/contentful-labs/Concorde