【发布时间】:2018-10-20 20:02:05
【问题描述】:
我面临的问题是人们说在 collectionView 中加载照片库时应用程序崩溃。大多数时候,他们有超过 2-3 千张照片。对我来说它工作正常。 (我的图库中只有不到 1000 张照片)。
问题:也许有什么方法可以在 collectionView 中显示图像更“智能”并使用更少的内存?
P.S 也许当用户在 iCloud 中拥有他的所有照片时也会导致崩溃?因为直到现在我认为应用程序在将其加载到单元格时并未下载照片。也许有人可以证明或不同意这一事实。
这是我的功能:
func grabPhotos(){
let imgManager = PHImageManager.default()
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = false
requestOptions.deliveryMode = .opportunistic // Quality of images
requestOptions.isNetworkAccessAllowed = true
requestOptions.isSynchronous = true
requestOptions.progressHandler = { (progress, error, stop, info) in
print("progress: \(progress)")
}
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
if let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions) {
if fetchResult.count > 0 {
for i in 0..<fetchResult.count {
imgManager.requestImage(for: fetchResult.object(at: i) , targetSize: CGSize(width: 150, height: 150), contentMode: .aspectFill, options: requestOptions, resultHandler: { image, error in
self.imageArray.append(image!)
self.kolekcija.reloadData()
})
}
}
else {
print("You got no photos")
kolekcija.reloadData()
}
}
}
【问题讨论】:
-
这当然不是答案,但我相信
UICollectionView的工作方式与UITableView完全相同 - 也就是说,您不是与数千人一起工作的细胞。这些控件被构建为通过对它们的单元进行排队来尽可能少地使用内存。我想知道你的问题是否出在其他地方。也许你是如何退休/存储你的数据源的? -
虽然与问题无关,但每次在
self.imageArray中添加新项目时停止重新加载集合视图。只需在循环完成时重新加载集合视图。它不会对实时图像显示做任何事情,因为主队列正忙于准备图像数组。
标签: ios swift collectionview