我有关于PHCachingImageManager的问题,我如何在自定义集合视图中处理数千张图像?
我在viewWillAppear中的代码如下所示。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
for i in 0..<phasset.count - 1 {
let getAsset = phasset[i]
catchingImage.startCachingImages(for: [getAsset], targetSize: CGSize(width:125,height:125), contentMode: .aspectFit, options: nil)
}
}
我在集合视图中的cellForIrem中的代码如下所示。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? thumbNailCell
catchingImage.requestImage(for: phasset[indexPath.row], targetSize: CGSize(width:125,height:125), contentMode: .aspectFill, options: nil) { (img, nil) in
cell?.ImageView.image = img!
}
return cell!
}
但是当我从照片库加载所有图像时,我也遇到了内存问题。
当我将图像调整为100.0 X 100.0时,它的工作正常,但是当我将每个图像保存在fileSystem(NSFileManager)中时,我保存图像不好,没有分辨率且质量不好,请以任何方式解决此问题没有记忆警告的图像
非常感谢。
答案 0 :(得分:0)
你必须使用两个不同的apis来解决你的问题。 渲染到单元格时使用上面提到的catchinImage api
catchingImage.requestImage(for: phasset[indexPath.row], targetSize: CGSize(width:100,height:100), contentMode: .aspectFill, options: nil) { (img, nil) in
cell?.ImageView.image = img!
}
但是当将图像保存到fileSystem时,你应该使用PHImageManager而不是catchmanager
let options = PHImageRequestOptions()
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat
options.networkAccessAllowed = YES //download from iCloud if required
PHImageManager.defaultManager().requestImageDataForAsset(phasset[indexPath.row], options: options) { (data, _, _, _) in
let retrievedData = NSData(data: retrievedCFData)
retrievedData.write(toFile:filepath atomically:NO)
}