Robię projekt, który musi pokazywać zdjęcia w albumie systemowym. Używam ViewController z UICollectionView
aby wyświetlić wszystkie zdjęcia z ViewModel. ViewModel otrzyma zdjęcia w viewDidLoad
metoda.
Ale gdy w albumie jest ponad tysiąc zdjęć, szybkość ładowania będzie naprawdę mała. Nie chcę ustawiać PHImageRequestOptions.synchronous
do No
ponieważ sprawi, że otrzymam niejasny obraz kciuka. Jak rozwiązać ten problem?
Oto kod:
- (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];
}];
}
}
Odpowiedzi:
0 dla odpowiedzi № 1Nie możesz pokazać ich wszystkich naraz. Tak więc pomysł, aby pobrać je wszystkie z góry, jest głupi. Użyj PHCachingImageManager ... Ta sytuacja jest dokładnie tym, do czego służy!