我有一组用户从照片库中选择的网址图片。有没有一种快速的方法可以从照片库中获取这些资产(它们永远不会超过5个),而无需迭代所有用户的照片(在我的测试中非常慢)。
以下是我现在使用的代码:
func loadCollectionView() {
arrImageViews.removeAll()
let options = PHFetchOptions()
//options.predicate = NSPredicate(format: "favorite == YES")
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: true)
]
let results = PHAsset.fetchAssets(with: .image, options: options)
var assets: [PHAsset] = []
results.enumerateObjects { (object, _, _) in
if let asset = object as? PHAsset {
assets.append(asset)
}
}
let manager = PHImageManager.default()
for thisAsset in assets {
thisAsset.getPHAssetURL(completionHandler: {(assetURL) in
if let strAssetURL = assetURL?.absoluteString {
if self.arrImagePaths.contains(strAssetURL) {
manager.requestImage(for: thisAsset, targetSize: CGSize(width: 80.0, height: 80.0), contentMode: .aspectFit, options: nil, resultHandler: {(thisImage, _) in
self.arrImageViews.append(UIImageView(image: thisImage))
self.cImages.reloadData()
})
}
}
})
}
}
getPHAssetURL是一个从资产中提取网址的扩展程序。
所以我要找的是assetURL?.absoluteString
与我的数组中的字符串之间的匹配。
答案 0 :(得分:1)
检查了docs后,我想如果您只想获取一个选定PHAsset
的信息,可以试试这个:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
guard let asset = info[UIImagePickerControllerPHAsset] as? PHAsset else { return }
let localId = asset.localIdentifier
//Save this variable in your model.
}
如果您在集合视图中实施了多照片选择,则必须查看其文档,了解如何获取所选媒体的PHAssets
。但它应该很容易。
然后使用var localIds: [String]
,您可以尝试:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: true)
]
let results = PHAsset.fetchAssets(withLocalIdentifiers: localIds, options: options)
请注意,您可以根据键here在获取请求中使用谓词执行进一步过滤。