从网上下载图像并在 UIImageView 中显示它是相当容易的。但是,这要求图像在显示给用户之前完全下载,完全打败了渐进式 JPEG(和 PNG)图像。
如何在传输完成时渲染部分下载的图像?我会想象 SDK 有一些可以更新图像的回调函数,但我找不到这样的函数。当前的 iOS SDK 是否有可能?
从网上下载图像并在 UIImageView 中显示它是相当容易的。但是,这要求图像在显示给用户之前完全下载,完全打败了渐进式 JPEG(和 PNG)图像。
如何在传输完成时渲染部分下载的图像?我会想象 SDK 有一些可以更新图像的回调函数,但我找不到这样的函数。当前的 iOS SDK 是否有可能?
我知道这篇文章大约有 1 年的时间,但以防万一有人在寻找它,有一个名为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];
此外,一个不错的选择是保存您的图像,interlaced
以便它以低质量加载并随着下载而改进。如果图像不是隔行扫描的,则从上到下加载。
现在在 libjpeg-turbo 之上有一个小型开源库,可以轻松解码和显示渐进式 JPEG:
let imageView = CCBufferedImageView(frame: ...)
if let url = NSURL(string: "http://example.com/yolo.jpg") {
imageView.load(url)
}
您是否尝试在调用 didReceiveData 时部分渲染 UIImage ...?有点像……</p>
-(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;
}
}