1
我想懒惰地加载图像并在启用了分页的滚动视图中显示它。当我加载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
简短的回答是你使用的内存太多。我发现这些乐器工具很难使用,但是你可以*看看你是否坚持你不想要的东西。可能你只是一次创建太多内存中的图像。即使两张大图也会引起记忆警告。通过在调试面板左侧显示“调试导航器”(第8个导航器中的第8个导航器),可以通过从Xcode(模拟器或设备)运行应用程序来查看总内存使用情况。 –