在UIScrollView中延迟加载图像

时间:2010-05-03 18:07:13

标签: iphone lazy-loading

我有一个需要滚动许多图像的应用程序。

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

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

这是延迟加载代码: 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];

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];

1 个答案:

答案 0 :(得分:2)

  1. 为什么willbegindecelerating方法中的代码?最好将它放在scrolviewdidscroll方法中,以便尽快开始加载。

  2. 您不应该修改单独线程中的任何视图,因为视图图形不是线程安全的

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