PHAsset图像在CollectionView中显示时会出现像素化

时间:2016-07-27 10:09:21

标签: ios swift uicollectionview phasset

我有这个代码,我在collectionView中使用它来获取图像。

           // Code in CollectionView's cellForItemAtIndex

           // Image

                PHImageManager.defaultManager().getPhoto(asset, size: cell.thumbnail.frame.size) { (image) in

                    if let properImage = image
                    {
                        dispatch_async(dispatch_get_main_queue(), {
                            cell.thumbnail.image = properImage
                        })
                    }
                    else
                    {
                        cell.thumbnail.image  = UIImage()
                    }
                }

getPhoto方法。

//MARK: PHImageManager

extension PHImageManager
{
    func getPhoto( asset : PHAsset, size : CGSize, completion : (image : UIImage?) -> ())
    {
        let options = PHImageRequestOptions()
        options.networkAccessAllowed = true
        options.synchronous = false
        options.resizeMode = PHImageRequestOptionsResizeMode.Exact
        options.deliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat

        _ = self.requestImageForAsset(asset, targetSize: size, contentMode: PHImageContentMode.AspectFit, options: options, resultHandler: {

            result , _ in

            if let resultValue  = result as UIImage?
            {
                completion(image: resultValue)
            }
            else
            {
                completion(image: nil)
            }
        })
    }
}

每当我将图像加载到collectionView中时,我都可以看到可见单元格的图像是像素化的。当我滚动图像时,它会以高质量的图像正确显示。

此外,我尝试了resizeModedeliveryMode的所有组合,对我没有帮助。我也试过启用synchronous

我想展示hight quality images in the first time本身。我不想滚动collectionView来获取它。

有什么方法可以解决这个问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要根据屏幕比例缩放图像大小,如下所示:

let retinaMultiplier = UIScreen.main.scale let size = CGSize(width:self.bounds.size.width * retinaMultiplier, height: self.bounds.size.height * retinaMultiplier)

并将此尺寸传递到targetSize方法的requestImageForAsset

确保为资产提取选择了正确的选项。