带有视频PHAsset的requestImageDataForAsset返回带有指向照片的imageData

时间:2016-02-18 22:58:10

标签: ios photokit ios-9-beta3

iOS9.3beta3,

虽然PHAssert是在设备上捕获的视频资产,但PHImageManager requestImageDataForAsset返回imageData指向照片。

文档says

  

“requestImageDataForAsset(_:选择:resultHandler:)

     

...如果版本选项设置为PHImageRequestOptionsVersionCurrent,   照片提供渲染的图像数据,包括对资产内容进行的任何编辑的结果。否则,照片提供   最初捕获资产的图像数据。“

这是iOS9.3中的错误吗?

阿米尔。

1 个答案:

答案 0 :(得分:1)

简单的解决方案

+ (void)getAssetData:(NSString *)ident completeBlock:(void (^)(NSData *assetData))completeBlock {
    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[ident] options:nil];
    if (fetchResult && [fetchResult count] == 0) {
        if (completeBlock) {
            completeBlock(nil);
        }
        return;
    }

    PHAsset *asset = fetchResult.firstObject;
    if (asset.mediaType == PHAssetMediaTypeVideo) {
        [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
            if ([asset isKindOfClass:[AVURLAsset class]]) {
                AVURLAsset* urlAsset = (AVURLAsset*)asset;
                NSNumber *size;
                [urlAsset.URL getResourceValue:&size forKey:NSURLFileSizeKey error:nil];
                NSData *data = [NSData dataWithContentsOfURL:urlAsset.URL];
                completeBlock(data);
            } else {
                completeBlock(nil);
            }
        }];
    } else {
        [[PHImageManager defaultManager] requestImageDataForAsset:fetchResult.firstObject options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
            completeBlock(imageData);
        }];
    }
}