使用照片框架

时间:2016-09-26 08:31:36

标签: swift2 uicollectionview

我有关于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)中时,我保存图像不好,没有分辨率且质量不好,请以任何方式解决此问题没有记忆警告的图像

非常感谢。

1 个答案:

答案 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)
}