RequestImage的结果处理程序调用了两次

问题描述 投票:1回答:1

我有一系列图像资产。我必须将这些资源转换为图像,将它们添加到阵列并将它们上传到Firebase数据库。我有2个问题。

问题1:

在自定义UICollectionViewCell中,我显示用户选择的所有图像,当我从照片中选择4个图像时,我在单元格中看到4个图像(我正在使用自定义框架)。现在,当我调用requestImage方法时,我得到的数量是图像中的两倍,它应该从资产数组中转换每个资产并将其存储到名为UIImageassetsTurnedIntoImages数组中。我读了更多关于它,它与PHImageRequestOptions有关,如果它的isSynchronous属性返回truefalse,那或如果PHImageRequestOptionsnil。现在,显然我没有得到什么,因为我的代码仍然不起作用。

问题2:

从下面的代码中可以看出,targetSize给了我一个略微缩略图的大小。当我将图像上传到存储空间时,我不需要缩略图,我需要它的原始大小。如果我将它设置为PHImageManagerMaximumSize我收到一个错误:

“资产连接中断或资产死亡”

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    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]
        let requestOptions = PHImageRequestOptions()
        requestOptions.isSynchronous = true  // synchronous works better when grabbing all images
        requestOptions.deliveryMode = .opportunistic
        imageManager.requestImage(for: asset, targetSize: CGSize(width: 100, height: 100), contentMode: .aspectFill, options: requestOptions)
        { (image, _) in
            DispatchQueue.main.async {
                print("WE ARE IN")
                cell.cellImage.image = image!
                self.assetsTurnedIntoImages.append(image!)
            }
        }
    }
    return cell
}
ios swift uicollectionview photos
1个回答
-1
投票

要避免完成处理程序的两次调用,只需在此请求中添加一个选项以使其同步

 let options = PHImageRequestOptions()
 options.isSynchronous = true
 let asset: PHAsset = self.photoAsset?[indexPath.item] as! PHAsset

    PHImageManager.default().requestImage(for: asset, targetSize: CGSize(width: 1200, height: 1200), contentMode: .aspectFit, options: options, resultHandler: {(result, info) in
        if result != nil {

           //do your work here


        }
    })

为避免加载图像时出现崩溃,您应该压缩图像或缩小图像以进行进一步的工作

© www.soinside.com 2019 - 2024. All rights reserved.