如何提高专辑加载速度

时间:2016-09-06 03:42:45

标签: ios objective-c photosframework

我正在做一个需要在系统相册中显示照片的项目。我使用带有UICollectionView的ViewController来显示从ViewModel获取的所有照片。 ViewModel将使用viewDidLoad方法获取照片。

但是当专辑中有超过一千张照片时,加载速度会非常慢。我不想将PHImageRequestOptions.synchronous设置为No因为它会让我得到一个不清晰的拇指图像。如何解决这个问题?

以下是代码:

- (void)enumerateAssetsInAssetCollection:(PHAssetCollection *)assetCollection original:(BOOL)original{
    NSLog(@"%@", assetCollection.localizedTitle);

    PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];

    options.synchronous = YES;
    options.resizeMode = PHImageRequestOptionsResizeModeExact;
    options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
    options.normalizedCropRect = CGRectMake(0, 0, kSCREEN_WIDTH/3, kSCREEN_WIDTH/3);

    PHFetchResult<PHAsset *> *assets = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];
    for (PHAsset *asset in assets) {
         CGSize size = original ? CGSizeMake(asset.pixelWidth, asset.pixelHeight) : CGSizeMake(kSCREEN_WIDTH/3, kSCREEN_WIDTH/3);

         [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
            NSLog(@"%@", result);
            [self.photoArray addObject:result];
         }];
    }
}

1 个答案:

答案 0 :(得分:0)

您无法一次显示所有内容。因此,预先将它们全部取出的想法是愚蠢的。使用PHCachingImageManager ......这种情况正是它的用途!

https://developer.apple.com/library/ios/documentation/Photos/Reference/PHCachingImageManager_Class/index.html#//apple_ref/occ/cl/PHCachingImageManager