我正在做一个需要在系统相册中显示照片的项目。我使用带有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];
}];
}
}
答案 0 :(得分:0)
您无法一次显示所有内容。因此,预先将它们全部取出的想法是愚蠢的。使用PHCachingImageManager ......这种情况正是它的用途!