0

PHFetchOptions の includeAllBurstAssets を使用しようとしています。私のカメラ ロールには、約 5 つのバースト アセットがあります (それぞれに約 10 枚の写真があります)。

カメラロールのアセットを列挙するには、次のことを行っています。

PHFetchOptions *fetchOptions = [PHFetchOptions new];

fetchOptions.includeAllBurstAssets = YES;

PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:fetchOptions];
PHFetchResult *assetFetch = [PHAsset fetchAssetsInAssetCollection:fetchResult[0] options:fetchOptions];

NSLog(@"Found assets %lu",(unsigned long)assetFetch.count);

includeAllBurstAssets プロパティを NO または YES に設定すると、まったく同じ数のアセットが取得されます。includeAllBurstAssets が YES に設定されている場合、この数値はもっと高くなると予想していました。これはバグですか、それとも includeAllBurstAssets を間違った方法で解釈していますか。

4

1 に答える 1

1

バースト シーケンスのすべての画像を照会する特別な方法があります。

[PHAsset fetchAssetsWithBurstIdentifier:options:]

あなたのケースでは、assetFetch オブジェクトを繰り返し処理し、PHAsset がバーストを表しているかどうかを確認する必要があります。

PHAssetプロパティを定義しますBOOL representsBurst

が返された場合はYES、そのバースト シーケンスのすべてのアセットをフェッチします。

理解に役立つコード スニペットを次に示します。

if (asset.representsBurst) {
    PHFetchOptions *fetchOptions = [PHFetchOptions new];
    fetchOptions.includeAllBurstAssets = YES;
    PHFetchResult *burstSequence = [PHAsset fetchAssetsWithBurstIdentifier:asset.burstIdentifier options:fetchOptions];
    PHAsset *preferredAsset = nil;
    for (PHAsset *asset_ in burstSequence) {
        if (PHAssetBurstSelectionTypeUserPick == asset.burstSelectionTypes || PHAssetBurstSelectionTypeAutoPick == asset.burstSelectionTypes) {
            asset = preferredAsset = asset_;
        }
    }
    if (!preferredAsset) {
        asset = burstSequence.firstObject;
    }
} 

ご覧のとおり、burstSelectionTypes は常に resp に設定されているわけではありません。バースト シーケンスのすべてのアセットで PHAssetBurstSelectionTypeNone になることがあります。

于 2015-02-02T01:28:07.120 に答える