我正在使用iOS中的Photos框架为我的应用程序开发叠加层,其工作方式类似于WhatsApp叠加层。为了访问用户的图库图像资源,我需要使用照片,并且无法使用UIImagePickerController。
为了更好地使用框架,我决定首先构建自己的图像选择器,然后开始从我的图库中加载图像并将其放入简单屏幕上的集合视图中。一旦我使用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)
在我的collectionView的cellForItemAtIndexPath中,我使用:
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和选项进行缓存,因此,我设置图像的回调块应该只调用一次高质量图像。
但是,如果我重新加载collectionView,或者甚至在第一次加载集合视图时,将回调两次,一次使用低质量图像,第二次使用高质量图像。
我不禁认为这是一个错误,因为我为Photos框架下载了Apple's tutorial code 并且它完成了确切的事情,即使文档明确说明如果我们发送相同的选项,contentMode和targetSize资产,它在缓存时只被调用一次。 (即使教程代码首先加载低质量图像,然后加载高质量图像,无论重新加载集合多少次。)
任何帮助都会非常受欢迎,因为我是AVFoundation编码的新手并且已经被这个问题困扰了。
如果这是一个非常长的阅读,我很抱歉,但提前感谢任何帮助!
答案 0 :(得分:-1)
了解In [807]: func = lambda x: (df_data.DateTime >= x.startTime) & (df_data.DateTime <= x.endTime)
In [808]: df_data[df_timeRanges.apply(func, axis=1).any()]
Out[808]:
Data DateTime
0 1 2017-09-01 00:00:00
2 3 2017-09-01 02:00:00
和属性PHImageRequestOptions
可能默认值设置为deliveryMode
案例机会主义
照片会自动提供一个或多个结果,以平衡图像质量和响应能力。