私はシステムアルバムに写真を表示する必要があるプロジェクトをやっています。私はUICollectionView
のViewControllerを使って、すべての写真をViewModelから取得するようにしています。 ViewModelはviewDidLoad
メソッドで写真を取得します。アルバムの読み込み速度を上げる方法
アルバムに1000枚以上の写真がある場合、読み込み速度は非常に遅くなります。私は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];
}];
}
}