使用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