PHAsset 图像在 CollectionView 中显示时像素化
Posted
技术标签:
【中文标题】PHAsset 图像在 CollectionView 中显示时像素化【英文标题】:PHAsset image comes pixelated while showing it in CollectionView 【发布时间】:2016-07-27 10:09:21 【问题描述】:我有这段代码,我在 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 中时,我都可以看到可见单元格的图像是像素化的。当我滚动浏览图像时,它以高质量的图像正确显示。
我也尝试了resizeMode
和deliveryMode
的所有组合,但对我没有帮助。我也尝试过启用synchronous
。
我想显示hight quality images in the first time
本身。我不想滚动浏览collectionView
来获取它。
有没有办法解决这个问题?提前致谢。
【问题讨论】:
【参考方案1】:您需要根据屏幕的比例缩放图像大小,如下所示:
let retinaMultiplier = UIScreen.main.scale
let size = CGSize(width:self.bounds.size.width * retinaMultiplier, height: self.bounds.size.height * retinaMultiplier)
并将此大小传递给您的 requestImageForAsset
方法的 targetSize
。
并确保您为资产提取选择了正确的选项。
【讨论】:
以上是关于PHAsset 图像在 CollectionView 中显示时像素化的主要内容,如果未能解决你的问题,请参考以下文章
PHAsset 图像在 CollectionView 中显示时像素化