返回

码放有序,效率随行,图片加载框架 Kingfisher 用法

iOS

Kingfisher:为 iOS 和 macOS 应用轻松加载和缓存图片

在当今以视觉为中心的移动应用领域,图片加载效率至关重要。Kingfisher 是 iOS 和 macOS 开发人员的绝佳选择,因为它简化了图片加载过程,并提供了开箱即用的强大功能。让我们深入了解 Kingfisher 的功能和用法。

Kingfisher 的优势

Kingfisher 是一个开源图片加载库,以下优势让它在众多库中脱颖而出:

  • 简化图片加载: Kingfisher 隐藏了底层图片加载的复杂性,使开发者可以轻松加载图片。
  • 内置缓存: Kingfisher 自动缓存加载的图片,优化性能并减少带宽使用。
  • 加载进度和状态跟踪: Kingfisher 提供进度和状态更新,让开发者能够跟踪图片加载的进度和结果。
  • 图像处理: Kingfisher 内置了图像处理器,可以轻松对图片进行裁剪、缩放和圆角等操作。

Kingfisher 的用法

导入 Kingfisher:

在 Swift 项目中导入 Kingfisher:

import Kingfisher

加载图片:

要加载图片,请使用 retrieveImage(with:options:progressBlock:completionHandler:) 方法。该方法接受图片 URL、可选加载选项、进度处理程序和完成处理程序:

KingfisherManager.shared.retrieveImage(with: imageUrl) { result in
    switch result {
    case .success(let image):
        // 加载图片成功
    case .failure(let error):
        // 加载图片失败
    }
}

配置缓存:

Kingfisher 默认启用缓存,但您可以自定义缓存配置:

KingfisherManager.shared.cache.memoryStorage.config.totalCostLimit = 10 * 1024 * 1024
KingfisherManager.shared.cache.diskStorage.config.sizeLimit = 100 * 1024 * 1024

上述代码设置了内存缓存的总成本限制为 10 MB,磁盘缓存的总大小限制为 100 MB。

跟踪进度:

通过提供进度处理程序,可以跟踪图片加载进度:

KingfisherManager.shared.retrieveImage(with: imageUrl) { result in
    switch result {
    case .success(let image):
        // 加载图片成功
    case .failure(let error):
        // 加载图片失败
    }
}
progressBlock: { receivedSize, totalSize in
    // 更新进度
}

跟踪状态:

完成处理程序提供加载状态:

KingfisherManager.shared.retrieveImage(with: imageUrl) { result in
    switch result {
    case .success(let image):
        // 加载图片成功
    case .failure(let error):
        // 加载图片失败
    }
}
completionHandler: { result in
    switch result {
    case .success:
        // 加载图片成功
    case .failure:
        // 加载图片失败
    }
}

Kingfisher 的高级用法

Kingfisher 提供了高级功能,扩展了其能力:

  • 自定义图片加载: Kingfisher 允许开发者自定义加载过程,包括使用自定义网络请求库。
  • 图像处理器: Kingfisher 提供了图像处理器,可以对加载的图片进行各种处理,例如裁剪和缩放。
  • 加载不同类型的图片: Kingfisher 可以加载网络图片、本地图片和内存图片。
  • 使用不同的缓存: Kingfisher 支持磁盘缓存和内存缓存,开发者可以根据需要选择。

常见问题解答

1. 如何加载本地图片?

使用 Kingfisher 加载本地图片:

let imageUrl = Bundle.main.url(forResource: "image", withExtension: "png")!
KingfisherManager.shared.retrieveImage(with: imageUrl) { result in ... }

2. 如何使用图像处理器?

要使用图像处理器,请创建一个处理器管道,然后将其传递给 retrieveImage 方法:

let processor = DownsamplingImageProcessor(size: CGSize(width: 200, height: 200))
let pipeline = ImagePipeline.init(processor: processor)
KingfisherManager.shared.retrieveImage(with: imageUrl, options: [.processor(pipeline)]) { result in ... }

3. 如何禁用缓存?

要禁用缓存,请使用 cacheType: .none 选项:

KingfisherManager.shared.retrieveImage(with: imageUrl, options: [.cacheType: .none]) { result in ... }

4. 如何获取图片的元数据?

使用 retrieveMetadata(with:) 方法获取图片的元数据:

KingfisherManager.shared.retrieveMetadata(with: imageUrl) { result in
    switch result {
    case .success(let metadata):
        // 获取元数据成功
    case .failure(let error):
        // 获取元数据失败
    }
}

5. 如何取消图片加载?

使用 cancelRetrieve 方法取消图片加载:

let task = KingfisherManager.shared.retrieveImage(with: imageUrl) { result in ... }
task.cancel()

结论

Kingfisher 是一个功能强大的图片加载库,为 iOS 和 macOS 开发者提供了简化和高效的解决方案。通过其简化的界面、开箱即用的缓存、进度跟踪和图像处理功能,Kingfisher 成为需要在应用中处理图片的开发者的理想选择。通过了解其功能和用法,开发者可以充分利用 Kingfisher,提升应用的图片加载性能。