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

时间:2017-09-05 12:39:08

标签: ios swift uicollectionview photos

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

问题1:

在自定义UICollectionViewCell中,我显示用户选择的所有图像,当我从照片中选择了4张图像时(我使用的是自定义框架),我在单元格中看到4张图像。现在,当我调用requestImage方法时,我得到的数据量是目标应该从资产数组中转换每个资产并将其存储到名为UIImage的{​​{1}}数组中的两倍。我详细了解了它,它与assetsTurnedIntoImages相关,如果其PHImageRequestOptions属性返回isSynchronoustrue,那么falsePHImageRequestOptions }。现在,显然我没有得到什么,因为我的代码仍然不起作用。

问题2:

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

  

“资产连接被中断或资产已经死亡”

PHImageManagerMaximumSize

2 个答案:

答案 0 :(得分:0)

使用: requestOptions.deliveryMode = .highQualityFormat

而不是:requestOptions.deliveryMode = .opportunistic

.opportunistic - 照片会自动提供一个或多个结果,以平衡图像质量和响应能力。

答案 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


        }
    })

为避免在加载图像时崩溃,您应该压缩图像或减小其尺寸以进行进一步的工作