我想检索本地所有相册中的所有照片
设备。基本上设备上的所有照片
编辑: fetchOptions.includeAssetSourceTypes = .typeUserLibrary见下面的代码
我就是这样做的:
var fetchResult: PHFetchResult<PHAsset>!
...
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchOptions.includeAssetSourceTypes = .typeUserLibrary
fetchResult = PHAsset.fetchAssets(with: fetchOptions)
然后,如果我想将其用作图像或缩略图(如果您希望将图像用作数据,请使用此let imageData: NSData = UIImagePNGRepresentation(myImage)
) I use:
/*
* From an asset to a UIImage, also can be used for thumbnail (if you change the :targetSize:)
*/
func getAsset(_ asset: PHAsset) -> UIImage {
//var thumbnail = UIImage()
var imageData = Data()
let options = PHImageRequestOptions()
options.isSynchronous = true
options.deliveryMode = .opportunistic
options.resizeMode = .fast
options.isNetworkAccessAllowed = false
PHImageManager.default().requestImage(for: asset, targetSize: view.frame.size, contentMode: .aspectFill, options: options) { image, info in
//thumbnail = image!
imageData: NSData = UIImagePNGRepresentation(image)
}
//You can check if the UIImage is nil. If it is nil is an iCloud image
//return thumbnail
return imageData
}
您可能会根据您的需要自定义上述代码或添加更多功能!
上面的代码是使用Swift 3.1和Xcode 8.3.1编写和测试的
根据苹果文档
是否允许网络访问一个布尔值,指定照片是否可以从 iCloud 下载请求的图像。如果为 true,并且请求的图像未存储在本地设备上,“照片”将从 iCloud 下载图像。要获得下载进度的通知,请使用 ProgressHandler 属性提供一个块,供 Photos 在下载图像时定期调用。如果为 false(默认值),并且图像不在本地设备上,则结果处理程序的信息字典中的 PHImageResultIsInCloudKey 值指示图像不可用,除非您启用网络访问。
使用 getAsset() 方法从资产中检索图像。有用