我有timestamp
个自定义UICollectionView
应该在每个{{1}中获取并显示照片中的缩略图(低质量)照片(通常用户可以选择多张照片)在单元格中。
我一直在玩UICollectionViewCell
及其属性,阅读它们。我甚至将UIImageView
作为PHImageRequestOptions
方法的参数,因为我不确定我错在哪里。
问题是nil
方法被调用两次。我需要第一次调用它来只是在低质量(缩略图像)的每个集合视图单元格中设置图像,一旦完整大小的图像准备就绪,它应该被添加到一个名为{的图像数组中{1}}。问题是我做错了什么,我总是把requestImage(for: PHAsset)
和requestImage(for: PHAsset)
方法调用两次,所以基本上,如果我从相机胶卷中选择了4张图像(因此,我在资产数组中有4个图像)当他们通过requestImage(for:asset)方法时,我在assetsTurnedIntoImages
而不是4中得到8个图像。所以这里是我的代码
if
答案 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
}