ios - iOS PHImageManager.default().requestImage 回调为同一张图片调用了两次
问题描述
当我尝试获取具有特定大小的图像时, PHImageManager.default().requestImage 会使用不同大小的图像调用两次。
这是代码:
static func load(from asset: PHAsset, targetSize: CGSize? = nil, completion: @escaping (UIImage?)->()) {
let options = PHImageRequestOptions()
options.isSynchronous = false
let id = UUID()
PHImageManager.default().requestImage(for: asset, targetSize: targetSize ?? PHImageManagerMaximumSize, contentMode: .aspectFill,
options: options, resultHandler: { image, _ in
print(id)
runInMain {
completion(image)
}
})
}
我添加了 UUID 以检查是否打印了两次相同的 UUID。
解决方案
这是因为第一个回调在加载完整大小的图像时返回一个缩略图。
来自苹果官方文档:
对于异步请求,照片可能会多次调用您的结果处理程序块。照片首先调用该块以提供适合临时显示的低质量图像,同时准备高质量图像。(如果低质量图像数据立即可用,则第一次调用可能会在方法返回之前发生。)当高质量图像准备好时,Photos 会再次调用您的结果处理程序来提供它。如果图像管理器已经以完整质量缓存了请求的图像,则照片只调用一次结果处理程序。结果处理程序的 info 参数中的 PHImageResultIsDegradedKey 键指示照片何时提供临时低质量图像。
推荐阅读
- javascript - 我的光标没有出现在我的一半图像中
- javascript - 无法在 vs 代码上启动模拟器以进行本机反应
- android - 如何设置以便可以从本地数据库更新和同步远程 sql 服务器?
- java - 使用自定义颜色而不是纯色排队线性填充填充
- python - 如何解决 TypeError: 'set' object is not subscriptable?
- c++ - 使用 curlpp 在 C++ 中发出 POST 请求
- c++ - 如何使用单循环在 C++ 中打印直角三角形
- arrays - 使用 Powershell 刷新数组复选框
- dll - 如何使用 mingw32 将 DLL 链接到程序中
- python - 如何解决此 keras 张量错误:无效参数:维度 1 的切片索引 100 超出范围