2010-05-03 133 views
0

我有一个应用程序需要滚动许多图像。在UIScrollView中延迟加载图像

因为我无法加载所有的图像,并将其保存在内存中,我懒加载它们。

问题是如果我滚动得太快,显示“黑色图像”(图像,无法加载)。

这是延迟加载代码: int currentImageToLoad = [self calculateWhichImageShowing] + imageBufferZone; [(UIView*)[[theScrollView subviews] objectAtIndex:0]removeFromSuperview]; PictureObject *pic = (PictureObject *)[imageList objectAtIndex:currentImageToLoad];

MyImageView *iv = [[MyImageView alloc] initWithFrame:CGRectMake(currentImageToLoad * 320.0f, 20.0f, 320.0f, 460)]; 
    NSData *imageData = [NSData dataWithContentsOfFile:[pic imageName]]; 
    [iv setupView:[UIImage imageWithData: imageData] :[pic imageDescription]]; 
    [theScrollView insertSubview:iv atIndex:5]; 
    [iv release]; 

这里面scrollViewWillBeginDecelerating代码:

[NSThread detachNewThreadSelector:@selector(lazyLoadImages) toTarget:self withObject:nil]; 

回答

2
  1. 为什么在willbegindecelerating方法的代码?将它放在scrolviewdidscroll方法中会更好,因此可以尽快加载。

  2. 你不应该从一个单独的线程修改任何意见看法图纸不是线程安全

  3. 是真正的图像存储为文件数据,或者是他们的图像文件?如果图像文件,请使用[UIImage imageNamed:]加载它们,因为此刻您正在执行2次转换。如果它们是数据,我建议您在第一次显示scollview时在单独的线程上为它们中的大多数创建UIImages,以便它们的图像在需要添加到滚动视图时准备好。