Получение последнего снимка, сделанного из библиотеки фотографий пользователя, возвращающего два снимка

При использовании следующего кода он получает мое последнее изображение, но дублирует его. Он всегда получает последний снимок, но возвращается в паре:

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

2 ответа

Хорошо после того, как мы провели некоторое исследование того, что делает и что делает "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) {
                             ...

Замещать PHAsset *lastAsset=[fetchResult lastObject]; в вашем коде просто

PHAsset *lastAsset=fetchResult;
Другие вопросы по тегам