2016-09-28 93 views
1

我正在使用iOS中的Photos框架为我的应用程序开发覆盖层,其工作方式类似于WhatsApp覆盖层。为了访问用户的图片资源,我需要使用照片,并且无法使用UIImagePickerController。PHCachingImageManager不缓存Swift 2.3

,以获得更好的介绍与框架,我决定先建立自己的图片选择,我开始了与加载图片来自我的画廊,并把它变成一个集合视图一个简单的屏幕上。一旦我使用PHAsset.fetchAssets(with: .image, options: fetchOptions) as PHFetchResult<PHAsset>

资产。然后,我在一个阵列中使用这些资产,在默认启动缓存PHCachingManager如下:

cachingImageManager.startCachingImages(for: self.assets, 
               targetSize: CGSize(width: 150.0, height: 150.0), 
               contentMode: .default, 
               options: nil) 

在我cellForItemAtIndexPath为的CollectionView,我使用:

cachingImageManager.requestImage(for: assets[indexPath.row], targetSize: CGSize(width: 150.0, height: 150.0), contentMode: .default, options: nil, resultHandler: { (image, info) in 
     cell.imageView.image = image 
    }) 

正如您所看到的,按照Apple文档,我在两个地方都使用与targetSize,contentMode和options完全相同的缓存,因此,我设置图像的回调块应该被调用一次合格ty图像。

然而,如果我重新加载的CollectionView,或甚至在集合视图的第一负载,回叫被调用两次,具有低质量图像和所述第二时间具有高质量图像一次。

我不禁想到这是一个错误,因为我为Photos框架下载了Apple's tutorial code,并且确实如此,即使文档明确指出如果我们为资产发送相同的选项contentMode和targetSize,在获取缓存时只会调用一次。 (即使教程代码首先加载低质量图像,然后再加载高质量图像,无论您重新加载集合多少次)。

任何帮助,因为我是新来AVFoundation编码,并通过这个问题已经被难倒是非常赞赏。

对不起,如果这是一个很长的阅读,但预先感谢任何帮助!

+0

尝试翠鸟框架图像捕捉易于使用,并得到荚按您的SWIFT版本。 –

+0

虽然我只需要使用图库图片,但我不需要下载任何东西 – Kunal

回答

0

阅读PHImageRequestOptions和财产deliveryMode可能是默认值设置为opportunistic

的情况下伺机

照片自动提供以平衡图像质量和响应一个或多个结果。