gpt4 book ai didi

ios - PHAsset 图像在 CollectionView 中显示时像素化

转载 作者:行者123 更新时间:2023-11-28 08:32:27 25 4
gpt4 key购买 nike

我有这段代码,我在 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 的所有组合,但对我没有帮助。我也尝试过启用同步

我想在第一时间展示高质量的图像。我不想滚动 collectionView 来获取它。

有什么办法可以解决吗?提前致谢。

最佳答案

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

让 retinaMultiplier = UIScreen.main.scale
让大小 = CGSize(宽度:self.bounds.size.width * retinaMultiplier,高度:self.bounds.size.height * retinaMultiplier)

并将此大小传递给 requestImageForAsset 方法的 targetSize

并确保您选择了正确的 Assets 获取选项。

关于ios - PHAsset 图像在 CollectionView 中显示时像素化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38609951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com