iOS图像加载器效果

时间:2016-06-13 07:57:11

标签: ios objective-c swift

我正在使用" SVProgressHUD"装载机。当我想从url加载图像时,我使用异步处理在后台加载图像。完成下载后,我正在更新UI。在那个时间段内,我在imageview上使用了一个占位符,并使用了#34;请等待.."。但我想使用像#" Instagram"这样的装载机。这意味着,当从在线加载图像时,它会加载原始图像的模糊图像,在下载图像时,模糊图像会显示原始图像。

任何人都可以建议我怎么做?

2 个答案:

答案 0 :(得分:4)

您正在谈论的内容是渐进式JPEG

  

渐进式JPEG(PJPEG)是一种存储多个的图像格式,   个人“扫描”一张照片,每张都有不断增加的水平   详情。放在一起时,扫描可以创建完整质量的图像。该   第一次扫描给出了非常低质量的图像表示,并且   每次扫描都会进一步提高细节和质量。   使用PJPEG下载图像时,我们可以将图像渲染为   我们有第一次扫描。随后的扫描通过,我们更新   图像并以越来越高的质量重新渲染。

因此,您必须以这种现代渐进格式加载图像。您可以按照一种方法,在保存在服务器上之前将每个图像转换为适当的渐进格式。有几种工具可用于不同类型的服务器。 E.g jpegtran

要检查图片是否为渐进式图片,您可以使用此tooltool2。您可以搜索许多可用工具的在线工具。

现在 iOS

您可以按照tutorial

进行操作

有些图书馆 Concorde
DFImageManager

答案 1 :(得分:0)

假设您可以控制图像的托管,您可以托管较低分辨率的图像并进行2次抓取,一次用于较低分辨率,另一次用于较高分辨率。如果您将较低分辨率图像的文件大小设置得显着缩小,则在获取完整图像之前将完成对其的提取,并使用此图像填充UIImageView,直到您可以替换它为止。

纯粹的示例代码如下所示:

let imageView = UIImageView()

let lowResOperation = NSBlockOperation {
    guard let imageData = NSData(contentsOfURL: NSURL(string: "https://myhost.org/low-res-image")!),
        image = UIImage(data: imageData) else { return }

    if imageView.image == nil {
        imageView.image = image
    }
}

let highResOperation = NSBlockOperation {
    guard let imageData = NSData(contentsOfURL: NSURL(string: "https://myhost.org/high-res-image")!),
        image = UIImage(data: imageData) else { return }

    imageView.image = image
}

let backgroundQueue = NSOperationQueue()
backgroundQueue.addOperations([lowResOperation, highResOperation], waitUntilFinished: true)