2015-09-07 212 views
0

使用以下代码时,它会获取我的最后一张照片,但它会复制它。它总是得到最后一张照片,但它返回一对:从用户照片库获取最后一张照片返回两张照片

UIImageView *imageView = (UIImageView *) [self.photoCollectionView viewWithTag:101]; 
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; 
PHAsset *lastAsset = [fetchResult lastObject]; 
[[PHImageManager defaultManager] requestImageForAsset:lastAsset 
           targetSize:imageView.bounds.size 
           contentMode:PHImageContentModeAspectFill 
           options:nil 
           resultHandler:^(UIImage *result, NSDictionary *info) { 
           NSLog(@"PHImageManager request results %@ and info %@", result, info); 
           dispatch_async(dispatch_get_main_queue(), ^{ 
            [user_photos addObject:result]; 
            NSLog(@"%lu",user_photos.count); 
            [self.photoCollectionView reloadData]; 
            NSLog(@"%lu",user_photos.count); 
           }); 
}]; 

为什么会出现这种情况?下面是日志语句:

2015-09-06 21:48:22.153[41357:11390462] PHImageManager request results <UIImage: 0x7fd1336b8f40>, {60, 40} and info { 
PHImageFileOrientationKey = 0; 
PHImageResultDeliveredImageFormatKey = 4031; 
PHImageResultIsDegradedKey = 1; 
PHImageResultRequestIDKey = 1; 
PHImageResultWantedImageFormatKey = 5003; 
} 
2015-09-06 21:48:22.158[41357:11390462] 2 
2015-09-06 21:48:22.159[41357:11390462] 2 

2015-09-06 21:48:22.166[41357:11390462] PHImageManager request results <UIImage: 0x7fd13374c3b0>, {386, 256} and info { 
PHImageFileOrientationKey = 0; 
PHImageResultDeliveredImageFormatKey = 5003; 
PHImageResultIsDegradedKey = 0; 
PHImageResultRequestIDKey = 1; 
PHImageResultWantedImageFormatKey = 5003; 
} 
2015-09-06 21:48:22.167[41357:11390462] 3 
2015-09-06 21:48:22.167[41357:11390462] 3 

这发生在模拟器上&设备。不使用第三方软件,我认为这不重要。为什么会被叫两次?我打电话给它在一个uialertaction块

回答

0

那么在做了什么“PHImageResultIsDegradedKey”做什么和是什么的研究后,自然是归结为操作系统检索图像数据,并得到它后,它调整了它的质量基于设置的输出,这就是为什么我看到第二个图像。

所以我所做的就是对资产的实际请求之前加入PHImageRequestOptions参数,它仅检索我想要的照片:

... 
PHAsset *lastAsset = [fetchResult lastObject]; 
PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init]; 
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; 
options.synchronous = NO; 
options.resizeMode = PHImageRequestOptionsVersionOriginal; 
options.networkAccessAllowed = NO; 
[[PHImageManager defaultManager] requestImageForAsset:lastAsset 
          targetSize:imageView.bounds.size 
          contentMode:PHImageContentModeAspectFit 
          options:options 
          resultHandler:^(UIImage *result, NSDictionary *info) { 
          ... 
0

更换PHAsset *lastAsset=[fetchResult lastObject];在你的代码只是

PHAsset *lastAsset=fetchResult;