如何提高相册加载速度

Posted

技术标签:

【中文标题】如何提高相册加载速度【英文标题】:How to enhance the album-loading speed 【发布时间】:2016-09-06 03:42:45 【问题描述】:

我正在做一个项目,需要显示系统相册中的照片。我使用带有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】:

您不能一次全部显示它们。因此,一次性将它们全部取出的想法是愚蠢的。使用PHCachingImageManager...这种情况正是它的用途!

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

【讨论】:

以上是关于如何提高相册加载速度的主要内容,如果未能解决你的问题,请参考以下文章

如何提高加载活动的速度?

前端开发,页面加载速度性能优化,如何提高web页面加载速度

如何有效提升WebView的加载速度

如何提高网页加载速度

4月6日学习笔记——如何提高网页加载速度(前端面试考点)

如何提高WordPress的加载速度