通过 PHAsset 的实时照片和普通照片
Live Photos and normal photos through PHAsset
我正在尝试显示一组照片。为了获得这些照片,我正在使用 Photos
框架。
我使用以下代码获取照片:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
images = PHAsset.fetchAssets(with: .image, options: options)
不过,我也想获得实时照片(所以两者的结合,实时照片最好只是第一个静止帧。
现在我知道您可以像这样获取实时照片:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
options.predicate = NSPredicate(format: "(mediaSubtype & %d) != 0", PHAssetMediaSubtype.photoLive.rawValue)
images = PHAsset.fetchAssets(with: options)
但是,我不知道如何将两者结合起来...有没有办法做到这一点,也许可以通过创建两个 NSPredicate
来实现?
谢谢
以下是通过 PHAsset
获取实时照片和静态照片的方法:
第 1 步:创建 NSPredicate
检测普通照片:
let imagesPredicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
第 2 步:创建 NSPredicate
以检测实况照片:
let liveImagesPredicate = NSPredicate(format: "(mediaSubtype & %d) != 0", PHAssetMediaSubtype.photoLive.rawValue)
第 3 步:将两者结合 NSCompoundPredicate
:
let compound = NSCompoundPredicate(orPredicateWithSubpredicates: [imagesPredicate, liveImagesPredicate])
第 4 步:将 NSCompoundPredicate
分配给您的 PHFetchOptions
:
options.predicate = compound
第 5 步:尽情享受吧!
所以在你的情况下:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
// Get all still images
let imagesPredicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
// Get all live photos
let liveImagesPredicate = NSPredicate(format: "(mediaSubtype & %d) != 0", PHAssetMediaSubtype.photoLive.rawValue)
// Combine the two predicates into a statement that checks if the asset
// complies to one of the predicates.
options.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: [imagesPredicate, liveImagesPredicate])
我正在尝试显示一组照片。为了获得这些照片,我正在使用 Photos
框架。
我使用以下代码获取照片:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
images = PHAsset.fetchAssets(with: .image, options: options)
不过,我也想获得实时照片(所以两者的结合,实时照片最好只是第一个静止帧。
现在我知道您可以像这样获取实时照片:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
options.predicate = NSPredicate(format: "(mediaSubtype & %d) != 0", PHAssetMediaSubtype.photoLive.rawValue)
images = PHAsset.fetchAssets(with: options)
但是,我不知道如何将两者结合起来...有没有办法做到这一点,也许可以通过创建两个 NSPredicate
来实现?
谢谢
以下是通过 PHAsset
获取实时照片和静态照片的方法:
第 1 步:创建 NSPredicate
检测普通照片:
let imagesPredicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
第 2 步:创建 NSPredicate
以检测实况照片:
let liveImagesPredicate = NSPredicate(format: "(mediaSubtype & %d) != 0", PHAssetMediaSubtype.photoLive.rawValue)
第 3 步:将两者结合 NSCompoundPredicate
:
let compound = NSCompoundPredicate(orPredicateWithSubpredicates: [imagesPredicate, liveImagesPredicate])
第 4 步:将 NSCompoundPredicate
分配给您的 PHFetchOptions
:
options.predicate = compound
第 5 步:尽情享受吧!
所以在你的情况下:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false)
]
// Get all still images
let imagesPredicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
// Get all live photos
let liveImagesPredicate = NSPredicate(format: "(mediaSubtype & %d) != 0", PHAssetMediaSubtype.photoLive.rawValue)
// Combine the two predicates into a statement that checks if the asset
// complies to one of the predicates.
options.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: [imagesPredicate, liveImagesPredicate])