Я хотел бы загружать изображения лениво и отображать их в scrollview, в котором пейджинг включен. Загрузка всех изображений одним выстрелом приводит к сбою приложения, поскольку я загружаю fullScreenImage. Его работа отлично, если я загружаю уменьшенное изображение с использованием aspectRatioThumbnail, но качество изображения хуже. Поэтому я хочу загружать изображения только для видимых страниц вместо загрузки всего за раз. Если я знаю, как лениво загружать изображения из библиотеки фотографий, я могу отображать изображения, используя только три страницы. ниже мой код ...Как загрузить изображения из библиотеки фотографий лениво?
-(void)loadImagesFromLibrary{
imageList = [[NSMutableArray alloc] init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
CGFloat __block xaxis=05;
NSUInteger __block images = 0;
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^(void){
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if(group){
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:^(ALAsset *assets, NSUInteger index, BOOL *innerStop){
if (assets && [[assets valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto])
{
//ALAssetRepresentation *representation = [assets defaultRepresentation ];
//UIImage *img = [UIImage imageWithCGImage:[representation fullScreenImage]];
UIImage *img = [UIImage imageWithCGImage:[assets aspectRatioThumbnail]];
if(img){
[imageList addObject:img];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xaxis, 5, 300, HEIGHT)];
[imageView setImage:[self rectSizeFormat:img Size:CGSizeMake(300, HEIGHT)]]; //resizing the image
[imageView setTag:images++];
[imageView setUserInteractionEnabled:YES];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(displayImageInMiddleView:)];
[tapGesture setNumberOfTapsRequired:1];
[imageView addGestureRecognizer:tapGesture];
[tapGesture release];
[scrollView addSubview: imageView];
[imageView release];
xaxis+=320;
}
}
}];
[scrollView setContentSize:CGSizeMake(xaxis, HEIGHT)];
}
else{
DLog(@"No image");
}
}
failureBlock:^(NSError *err) {
DLog(@"%@", [err localizedDescription]);
}];
});
}
Я знаю, что это не может быть объяснено в нескольких строках. Все, что я прошу, это дать мне намек на то, что я хочу, или предложить мне, как я могу это сделать по-другому. Спасибо заранее.
Спасибо за ваше предложение. Я столкнулся с странной проблемой. Я выбираю и показываю изображения в разных ViewController при нажатии кнопки. После третьего посещения страницы я получаю предупреждение о памяти. Я правильно обработал память. Я не понял, почему это происходит? Есть ли у вас какие-либо идеи, что может привести к сбою приложения после определенного посещения? Есть ли общая ошибка/исключения, которые необходимо обрабатывать при использовании библиотеки активов? – Alex
Короткий ответ заключается в том, что вы используете слишком много памяти. Я считаю, что инструменты Инструменты трудно использовать, но вы можете * посмотреть, не держитесь ли вы за то, что вы не имеете в виду. Возможно, вы просто создаете слишком много изображений в памяти за один раз. Даже два больших изображения могут вызвать предупреждение о памяти. Вы можете увидеть общее использование памяти, запустив приложение с Xcode (симулятор или на устройстве) с помощью «отладочного навигатора», видимого на панели отладки слева (6-й навигатор из 8). –