PHCachingImageManager.requestImage总是被调用两次?

时间:2017-09-20 14:23:05

标签: ios swift uicollectionviewcell phasset xcode9

我有timestamp个自定义UICollectionView应该在每个{{1}中获取并显示照片中的缩略图(低质量)照片(通常用户可以选择多张照片)在单元格中。

我一直在玩UICollectionViewCell及其属性,阅读它们。我甚至将UIImageView作为PHImageRequestOptions方法的参数,因为我不确定我错在哪里。

问题是nil方法被调用两次。我需要第一次调用它来只是在低质量(缩略图像)的每个集合视图单元格中设置图像,一旦完整大小的图像准备就绪,它应该被添加到一个名为{的图像数组中{1}}。问题是我做错了什么,我总是把requestImage(for: PHAsset)requestImage(for: PHAsset)方法调用两次,所以基本上,如果我从相机胶卷中选择了4张图像(因此,我在资产数组中有4个图像)当他们通过requestImage(for:asset)方法时,我在assetsTurnedIntoImages而不是4中得到8个图像。所以这里是我的代码

if

2 个答案:

答案 0 :(得分:1)

可怕的是,关于requestImage:forAsset被叫两次,你无能为力。但是,您可以更改将图像放入数组的方式,以避免重复。我可以建议:

self.assetsTurnedIntoImages[indexPath.row] = image

这将导致第二次传递完成的图像替换第一次调用的图像,避免重复。

您需要提前为阵列预先初始化足够的空间,以便indexPath.row不会尝试访问您的阵列越界。 在ViewDidLoad中添加一些效果:

self.assetsTurnedIntoImages = [UIImage](repeating: UIImage(), count: assets.count)

答案 1 :(得分:0)

您可以通过包含以下条件来丢弃那些低分辨率重复项:

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

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