![](/img/trans.png)
[英]UICollectionView: Is there a way to reload only the supplementary views?
[英]Best way to reload UICollectionView
我有一个UICollectionView
,可以从照片库加载照片集。
for asset: PHAsset in self.photoAssets! {
SFSImageManger.imageFromAsset(asset, isOriginal: false, toSize: CGSize(width: 150, height: 150), resultHandler: { (image: UIImage?) in
guard image != nil else { return }
dispatch_async(dispatch_get_main_queue(), {
self.photos.append(image!)
self.albumCollection.reloadData()
})
})
}
这就是我加载照片的方式。 问题是当我有很多照片(例如500张以上)时,滚动查看时collectionView会闪烁,并且直到for循环完成时collectionView选择才起作用。
我不希望该应用程序显示加载进度并冻结UI。 那么,在这种情况下如何提高性能?
我要做的是在您的照片数组中创建一个didSet,如下所示:
var photos = [UIImages]() {
didSet {
albumCollection.reloadData()
{
}
我想您的循环在一个函数中,在这种情况下,我将创建一个临时数组,并使用photos数组对其进行初始化,将图像附加到该临时数组中,然后在循环之后将该临时数组分配回原始的photo数组。 我的想法是这样的:
var tempPhotos = photos
for asset: PHAsset in self.photoAssets! {
SFSImageManger.imageFromAsset(asset, isOriginal: false, toSize: CGSize(width: 150, height: 150), resultHandler: { (image: UIImage?) in
guard image != nil else { return }
dispatch_async(dispatch_get_main_queue(), {
self.tempPhotos.append(image!)
})
})
}
photos = tempPhotos
这样,collectionView将仅更新一次。 问候豪尔赫·帕拉维奇尼。
从cellForRow
方法中的资产生成图像,而图像正在生成显示占位符,或者只是灰色背景,而不是单元格中的图像。
您不应该重新加载完整的集合视图。 而是使用带有insertItems()
增量更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.