Nuke
用于图像编辑和处理的开源 Swift 库
免费的 Swift API,允许自定义图像管道、调整图像大小、使用自定义处理器、圆角图像、下载和现金图像等。
开始使用 Nuke
安装 Nuke 的推荐方法是使用 CocoaPods。请将以下几行添加到您的 Podfile
通过 CocoaPods 安装 Nuke。
pod "Nuke"
pod "Nuke-Alamofire-Plugin" # optional
pod "Nuke-AnimatedImage-Plugin" # optional
使用以下命令克隆最新的源。
通过 GitHub 安装 Nuke。
$ git https://github.com/kean/Nuke.git
使用 Swift 下载和使用图片
开源 Nuke API 为在 Swift 应用程序中下载和使用图像提供了一种组织良好且有效的方式。要获取图像,您需要传递所需图像的 URL,然后调用 resume 方法。它将在后台下载请求的图像,并在完成后通知响应关闭。
不同方式的视图在快速应用中
// Load images directly using Async/Await
func loadImage() async throws {
let response = try await pipeline.image(for: url, delegate: self)
}
// Use UI components provided by NukeUI mode
struct ContainerView: View {
var body: some View {
LazyImage(url: URL(string: "https://example.com/image.jpeg"))
}
}
使用斯威夫特的图像API
预览是一个非常有用的特性、使用户能够提前下载图像或其他数据、以期预测其使用。 应用程序可以下载它并存储在应用程序的网络缓存中。 稍后当您需要查看图像时、您的请求回应将从缓存而不是网络返回。 开放源码API Nuke包括支持一个令人兴奋的功能、称为使用Swift代码预发图像。 请记住Prefetit可以接收用户的数据、并给CPU和内存增加压力。 为了减少这个压力、您只能选择磁盘缓存作为预发目的地。
使用斯威夫特GitHub区
inal class PrefetchingDemoViewController: UICollectionViewController {
private let prefetcher = ImagePrefetcher()
private var photos: [URL] = []
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.isPrefetchingEnabled = true
collectionView?.prefetchDataSource = self
}
}
extension PrefetchingDemoViewController: UICollectionViewDataSourcePrefetching {
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
let urls = indexPaths.map { photos[$0.row] }
prefetcher.startPrefetching(with: urls)
}
func collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) {
let urls = indexPaths.map { photos[$0.row] }
prefetcher.stopPrefetching(with: urls)
}
}
通过 Swift 加载和兑现图片
图像缓存是一种非常有用的方法,可以提高应用程序性能和最终用户体验。开源 Nuke API 使软件应用程序能够自动缓存下载的图像。 Nuke 依赖于两个内置的缓存层。第一个用于存储处理后的图像,准备显示。它使用 LRU 算法——在扫描期间首先删除最近最少使用的条目。第二个nd 使用HTTP Disk Cache 来存储未处理的图像数据。也可以检查缓存中是否存在请求的图像。
Read/Write通过Swift记忆或磁盘缓存的图像API
let cache = pipeline.cache
let request = ImageRequest(url: URL(string: "https://example.com/image.jpeg")!)
cache.cachedImage(for: request) // From any cache layer
cache.cachedImage(for: request, caches: [.memory]) // Only memory
cache.cachedImage(for: request, caches: [.disk]) // Only disk (decodes data)
let data = cache.cachedData(for: request)
cache.containsData(for: request) // Fast contains check
// Stores image in the memory cache and stores an encoded
// image in the disk cache
cache.storeCachedImage(ImageContainer(image: image), for: request)
cache.removeCachedImage(for: request)
cache.removeAll()