使用PhotosFramework有点不同,你可以达到相同的结果,但你只需要在零件中完成。
1)获取的所有照片(矩在iOS8上,或前相机胶卷)
PHFetchResult *allPhotosResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil];
可选,如果你想命令他们通过创建日期,你只需要添加PHFetchOptions
像这样:
PHFetchOptions *allPhotosOptions = [PHFetchOptions new];
allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *allPhotosResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:allPhotosOptions];
现在,如果你愿意,你可以从PHFetchResult
对象得到资产:
[allPhotosResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {
NSLog(@"asset %@", asset);
}];
2)获取所有用户的相册(带额外的排序,例如,只显示相册,有至少一张照片)
PHFetchOptions *userAlbumsOptions = [PHFetchOptions new];
userAlbumsOptions.predicate = [NSPredicate predicateWithFormat:@"estimatedAssetCount > 0"];
PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:userAlbumsOptions];
[userAlbums enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {
NSLog(@"album title %@", collection.localizedTitle);
}];
对于从PHFetchResult *userAlbums
返回各PHAssetCollection
,你可以像这样取PHAssets
(你甚至可以限制结果只包括照片资产):
PHFetchOptions *onlyImagesOptions = [PHFetchOptions new];
onlyImagesOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType = %i", PHAssetMediaTypeImage];
PHFetchResult *result = [PHAsset fetchAssetsInAssetCollection:collection options:onlyImagesOptions];
3)获取智能相册
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
[smartAlbums enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {
NSLog(@"album title %@", collection.localizedTitle);
}];
一件事带有S要注意如果estimatedAssetCount无法确定,则collection.estimatedAssetCount
可返回NSNotFound
。正如标题所示,这是估计的。如果你想确保你有进行抓取,并得到像计数资产的数目:
PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];
多项资产= assetsFetchResult.count
苹果有一个示例项目,你想要做什么:
https://developer.apple.com/library/content/samplecode/UsingPhotosFramework/ExampleappusingPhotosframework.zip(必须是已注册的开发人员访问此)
嘿@拉迪斯拉夫,很好的答案。但你怎么知道使用'creationDate'作为sortDescriptor,照片属性是否记录在任何地方? – snowbound 2015-07-15 03:35:24
苹果公司在此有一个非常好的文档 - https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHFetchOptions_Class/index。请看一下sortDescriptors,你会看到: “构建带有你想要获取的照片实体属性的排序描述符,如表1所列。”#://apple_ref/doc/uid/TP40014396-CH1-SW5 “例如,以下代码按照创建日期进行排序,以查找照片库中最旧的资源。“ 表1具有可用于PHAsset,PHAssetCollection,PHCollectionList,PHCollection的所有属性... – Ladislav 2015-07-17 17:59:04
谢谢。正是我在找什么! – snowbound 2015-07-20 06:38:13