PhotoKit: includeAllBurstAssets в PHFetchOptions не работает

Я пытаюсь использовать includeAllBurstAssets PHFetchOptions. В моем фотопленке есть около 5 снимков (у каждого по 10 фотографий).

Для перечисления активов в Camera Roll я делаю следующее:

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.

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 не всегда установлены соответственно. иногда PHAssetBurstSelectionTypeNone для всех активов последовательности пакета.

Другие вопросы по тегам