如何获得所有照片正确的Swift3的iOS(为什么我得到重复的照片)
问题描述:
我想列出从“我的照片流”的所有照片,这里是我的代码:如何获得所有照片正确的Swift3的iOS(为什么我得到重复的照片)
private func fetchAssetCollection(){
let result = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumMyPhotoStream, options: nil)
result.enumerateObjects({ (collection, index, stop) in
if let albumName = collection.localizedTitle {
print("Album => \(collection.localIdentifier), \(collection.estimatedAssetCount), \(albumName) ")
}
let assResult = PHAsset.fetchAssets(in: collection, options: nil)
let options = PHImageRequestOptions()
options.resizeMode = .exact
let scale = UIScreen.main.scale
let dimension = CGFloat(78.0)
let size = CGSize(width: dimension * scale, height: dimension * scale)
assResult.enumerateObjects({ (asset, index, stop) in
print("index \(index)")
PHImageManager.default().requestImage(for: asset, targetSize: size, contentMode: .aspectFill, options: options) { (image, info) in
if let name = asset.originalFilename {
print("photo \(name) \(index) \(asset.localIdentifier)")
}
}
})
})
}
extension PHAsset {
var originalFilename: String? {
var fname:String?
if #available(iOS 9.0, *) {
let resources = PHAssetResource.assetResources(for: self)
if let resource = resources.first {
fname = resource.originalFilename
}
}
if fname == nil {
// this is an undocumented workaround that works as of iOS 9.1
fname = self.value(forKey: "filename") as? String
}
return fname
}
}
它作品,但问题是它打印重复的记录。 它打印329 * 2记录,但实际上我有“我的照片流”中的329张照片。
photo IMG_0035.JPG 10 0671E1F3-CB7C-459E-8111-FCB381175F29/L0/001
photo IMG_0035.JPG 10 0671E1F3-CB7C-459E-8111-FCB381175F29/L0/001
......
答
从文档PHImageManager requestImage
:
默认情况下,这个方法异步执行。如果您从后台线程调用它,您可以将options参数的
isSynchronous
属性更改为true
,以阻止调用线程,直到请求的图像准备就绪或出现错误,此时Photos会调用您的结果处理程序。对于异步请求,Photos可能会多次调用您的结果处理程序块。照片首先调用该块,以便在准备高质量图像时提供适合临时显示的低质量图像。 (如果低质量图像数据立即可用,则第一次调用可能在方法返回之前发生。)当高质量图像准备就绪时,Photos会再次调用您的结果处理程序来提供它。如果图像管理器已经以完全质量缓存了所请求的图像,Photos只会调用您的结果处理程序一次。结果处理程序的info参数中的
PHImageResultIsDegradedKey
键指示照片何时提供暂时的低质量图像。
因此,无论提出请求同步或从info
字典检查PHImageResultIsDegradedKey
值,看看图像的这种情况是你真正想要保留或忽略的一个。
谢谢,可能我需要仔细阅读文档。 :( – User9527