2015-01-20 6 views
0

PHFetchOptions의 includeAllBurstAssets를 사용하려고합니다. 내 카메라 롤에는 약 5 개의 버스트 애셋 (각각 약 10 장의 사진)이 있습니다. 내가 NO로 includeAllBurstAssets 속성을 설정하면,PhotoKit : PHFetchOptions의 includeAllBurstAssets이 작동하지 않습니다.

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); 

상관없이 또는 YES, I는 자산의 동일한 수를 얻을 :

나는 다음과 같은 일을 해요 카메라 롤에 자산을 열거합니다. includeAllBurstAssets가 YES로 설정된 경우 숫자가 더 높아질 것으로 예상했습니다. 이것은 버그입니까, 아니면 includeAllBurstAssets를 잘못 해석하고 있습니다.

답변

2

버스트 시퀀스의 모든 이미지를 쿼리하는 특별한 방법이 있습니다.

[PHAsset fetchAssetsWithBurstIdentifier:options:] 

귀하의 경우 assetFetch 객체를 반복하고 PHAsset이 버스트를 나타내는 지 확인해야합니다. 즉 그 버스트 순서에 대한 모든 자산을 가져, YES을 반환하는 경우

PHAsset은 재산을 BOOL representsBurst

을 정의합니다. 당신이 볼 수 있듯이

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입니다.

+1

감사합니다. includeAllBurstAssets가 PHAsset의 모든 fetch-methods에 적용될 것이라고 가정했습니다. 그것은 fetchAssetsWithBurstIdentifier에만 적용됩니다 : asset.burstIdentifier는 문서에서 완전히 명확하지 않습니다. – holtmann