当使用Photo获取图像和视频时,我的图像和视频缩略图在我的LazyVGrid中以低分辨率显示。
当我在更大的图像视图中显示图像时,它们也会显示在larger中。
我所有的图像和视频都存储在iCloud上,所以我在PHImageRequestOptions()中设置了isNetworkAccessAllowed = true和deliveryMode = .highQualityFormat。
我尝试过将requestImage方法中的requestImage更改为不同的值,但这也没有改变质量。
我做错了什么?
@Published var fetchedMediaArray : [MediaAsset] = []
// model for Assets
struct MediaAsset: Identifiable, Hashable {
var id = UUID()
var image : UIImage
var selected: Bool
var asset: PHAsset
}
func requestAuth() {/*auth code*/ }
func fetchPhotosAndVideos() {
let opt = PHFetchOptions()
opt.includeHiddenAssets = false
opt.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
opt.predicate = NSPredicate(format: "mediaType == %d || mediaType == %d",
PHAssetMediaType.image.rawValue,
PHAssetMediaType.video.rawValue)
let req = PHAsset.fetchAssets(with: opt)
DispatchQueue.main.async {
let options = PHImageRequestOptions()
options.isSynchronous = true
options.deliveryMode = .highQualityFormat
options.isNetworkAccessAllowed = true
for j in 0..<req.count {
PHCachingImageManager.default().requestImage(for: req[j], targetSize: CGSize(width: 100, height: 100), contentMode: .default, options: options) { (image, _) in
let data1 = MediaAsset(image: image!, selected: false, asset: req[j])
self.fetchedMediaArray.append(data1)
}
}
}
}发布于 2021-06-24 18:15:48
当照片从云中下载时,它可能会多次调用完成处理程序。
从PHImageManager.requestImage(用于:资产)文档-
讨论 对于异步请求,Photos可能会多次调用结果处理程序块。照片首先调用块以提供适合于在准备高质量图像时临时显示的低质量图像。(如果低质量的图像数据立即可用,则可能在该方法返回之前进行第一次调用)。当高质量的图像准备好后,Photos再次调用您的结果处理程序来提供它.如果图像管理器已经完全缓存了所请求的图像,Photos只调用您的结果处理程序一次。结果处理程序信息参数中的 PHImageResultIsDegradedKey 键指示Photos何时提供临时的低质量图像.
在你的回调处理程序里你能做什么-
https://stackoverflow.com/questions/68120650
复制相似问题