- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 iOS PhotoKit 中,我可以像这样获取所有非空相册:
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "estimatedAssetCount > 0")
let albumFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: albumFetchOptions)
albumFetchResult.enumerateObjects({ (collection, _, _) in
// Do something with the album...
})
然后我只能像这样从相册中获取照片:
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetResourceType.photo.rawValue)
let fetchResults = PHAsset.fetchAssets(in: collection, options: fetchOptions)
但是第一部分可以给我只有视频的相册,这意味着我将谓词应用于第二部分后,相册将是空的。有没有办法在我开始使用它们之前过滤掉第一部分中的那些相册?
最佳答案
如果不获取集合中的项目,似乎无法像这样过滤集合。参见 the docs可用的获取选项; none 允许按特定类型媒体的数量进行过滤。
我实现此目的的方法是获取用户创建的所有相册,然后使用仅返回图像的谓词从相册中获取 Assets 。
所以把它放在代码中:
var userCollections: PHFetchResult<PHAssetCollection>!
// Fetching all PHAssetCollections with at least some media in it
let options = PHFetchOptions()
options.predicate = NSPredicate(format: "estimatedAssetCount > 0")
// Performing the fetch
userCollections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: options)
接下来,通过指定谓词从图像集合中获取 Assets :
// Getting the specific collection (I assumed to use a tableView)
let collection = userCollections[indexPath.row]
let optionsToFilterImage = PHFetchOptions()
optionsToFilterImage.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue)
// Fetching the asset with the predicate to filter just images
let justImages = PHAsset.fetchAssets(in: collection, options: optionsToFilterImage)
最后,统计图像的数量:
if justImages.count > 0 {
// Display it
} else {
// The album has no images
}
关于ios - 仅获取至少包含一张照片的 PHAssetCollections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800729/
我可以得到所有的照片,但我不知道如何找到这些照片所在的相册。另一种选择是浏览所有相册并从中获取照片。我认为这不是一个好的选择。目标是获取每张照片的相册名称。 private func getP
我对如何正确初始化相机应用程序中的 PHAssetCollection 以便将视频保存到相册感到困惑。我不想对相册中的任何视频或图片做任何事情,我只是想通过我的相机应用程序将捕获的视频保存到相册中,该
在 iOS PhotoKit 中,我可以像这样获取所有非空相册: let fetchOptions = PHFetchOptions() fetchOptions.predicate = NSPred
最近添加的集合有一个子类型:PHAssetCollectionSubtypeSmartAlbumRecentlyAdded。然而没有assetCollectionSubtype 将标识“最近删除”集合
我的应用程序中有 PHAssetCollection,其中包含所有相册应用。 问题是我可以从所有照片中删除图像,但无法从相机胶卷、收藏夹、屏幕截图等中删除图像。 请帮我从 PHAssetCollect
我正在使用 Photos 框架通过这段代码在 iOS8 中获取相册列表, 如何重新排序 smartAlbums,以便我可以在所有顶部显示“最近添加” let smartAlbums : PHFetc
为了从设备中获取几张照片,将以下方法放在默认的全局队列中。如果系统版本高于 iOS 8,则使用 Photos 框架,否则使用 ALAssetLibrary。 dispatch_semaphore_t
我正在使用 Apples Photos Framework 将 PHAssetCollections 加载到我的应用程序中。我总是得到智能收藏的英文名称。例如,我得到的是“收藏夹”而不是“收藏夹”(瑞
使用 iOS 11/Swift 4,我正在尝试从照片库中过滤一组精彩瞬间。我只想要 Places。使用 nil 选项检索时刻集合,我得到 13 个时刻,其中 8 个时刻具有非零标题(位置)。当我使用一
我创建了一个 PHAssetCollection 来为我的应用程序存放我的照片,它工作正常。但是,我试图拥有它,以便用户可以在按下按钮时删除 PHAssetCollection。如何删除我在以下代码中
在 iOS 8 的 Photos.framework 中,我试图将 UIImage 保存到用户的照片库中,这与您在 Safari 中长按图像并选择“保存图像”的方式非常相似。在 iOS 7 中,只需调
我想在我的应用程序中更改专辑名称。 if ([collection canPerformEditOperation:PHCollectionEditOperationRename] == YES)
我想获取我的自定义相册的所有照片。 但我得到的是以下错误。 我的密码 let collections:PHFetchResult = PHAssetCollection.fetchAssetColle
我正在使用以下代码尝试将新图像保存到 PHAssetCollection,特别是相机胶卷(又名用户库): [[PHPhotoLibrary sharedPhotoLibrary] performCha
我正在尝试讨论 iOS 8 照片编辑功能的新照片功能。他们的文档非常少,所以我希望您能提供一些关于可能发生的事情的意见。 我正在尝试获取用户保存的所有图像。我正在获取数据,但它一直告诉我结果大小为 0
我正在使用照片框架(又名 PhotoKit)。在我的应用程序中,我需要收集 Moments(类型为 PHAssetCollection)。 PHAssetCollection 具有 CLLocatio
当我像这样启动照片获取时: let assetCollections: PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(
我遵循 Apple 的示例代码“ExampleappusingPhotosframework”。 在 PHAssets/PHAssetCollection 的主题中,我注意到可能存在“文件夹”。这些可
我正在尝试通过 Asset 访问 AssetCollection。当代码执行时,照片框架返回 nil。仅供引用: Assets 是用 iPhone 相机单击的图片,因此它存储在相机胶卷下。 77AF0
我正在使用以下代码存储照片。但现在我必须使用名称从存储中获取照片。 第一个问题:如何使用名称存储照片?我应该将它存储在 Core Data 中吗? 第二个问题:如何使用我之前给它取的名字得到那张照片?
我是一名优秀的程序员,十分优秀!