gpt4 book ai didi

ios - PHCachingImageManager.requestImage 总是被调用两次?

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:16 25 4
gpt4 key购买 nike

我有一个带有自定义 UICollectionViewCellUICollectionView,它应该从照片中获取并显示缩略图(低质量)照片(通常用户可以选择多于 1 张照片)在单元格中的每个 UIImageView 中。

我一直在研究 PHImageRequestOptions 及其属性,阅读有关它们的信息。在某种程度上,我什至将 nil 作为 requestImage(for: PHAsset) 方法的参数传递,因为我不确定我哪里错了。

问题是 requestImage(for: PHAsset) 方法被调用了两次。我需要第一次调用它只是为了在每个 Collection View 单元格中设置低质量的图像(缩略图),一旦全尺寸图像准备就绪,它应该添加到名为 assetsTurnedIntoImages< 的图像数组中。问题是我做错了什么,我总是会调用两次 ifelse 方法,所以基本上,如果我从相机中选择了 4 张图像滚动(因此,我在 assets 数组中有 4 个图像)并且当它们通过 requestImage(for: asset) 方法时,我在 assetsTurnedIntoImages 中得到 8 个图像而不是 4 个。所以这是我的代码

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
print("Assets count is:", assets.count)
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PhotoPostCVCell", for: indexPath) as! PhotoPostCVCell
if let takenImage = cameraPhotoUIImage
{
cell.cellImage.image = takenImage
}
if assets.count > 0
{
let asset = assets[indexPath.row]

// var imageRequestOptions: PHImageRequestOptions
// {
// let options = PHImageRequestOptions()
// //options.version = .current
// //options.resizeMode = .exact
// //options.deliveryMode = .fastFormat
// options.isSynchronous = true
// return options
// }
let targetSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight)
imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: nil)
{ (image, info) in
if image != nil
{
let imageQualityState = info![PHImageResultIsDegradedKey] as! Bool

if imageQualityState
{
print("LOW QUALITY")
print("Image Quality State is:", imageQualityState)
cell.cellImage.image = image
print(image!.size)
}
else
{
print(image!.size)
cell.cellImage.image = image
self.assetsTurnedIntoImages.append(image!)
}
}
}
}
return cell
}

最佳答案

您可以通过包含以下条件来丢弃那些低分辨率的副本:

imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: nil) { (image, info) in

let isDegraded = (info?[PHImageResultIsDegradedKey] as? Bool) ?? false
if isDegraded {
return
}

关于ios - PHCachingImageManager.requestImage 总是被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com