我有这个代码,我在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
来获取它。
有什么方法可以解决这个问题吗?提前谢谢。
答案 0 :(得分:0)
您需要根据屏幕比例缩放图像大小,如下所示:
let retinaMultiplier = UIScreen.main.scale
let size = CGSize(width:self.bounds.size.width * retinaMultiplier, height: self.bounds.size.height * retinaMultiplier)
并将此尺寸传递到targetSize
方法的requestImageForAsset
。
确保为资产提取选择了正确的选项。