【问题标题】:lazy loading images in UIScrollView在 UIScrollView 中延迟加载图像
【发布时间】:2010-05-03 18:07:13
【问题描述】:

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

因为我不能加载所有的图片,并把它保存在内存中,所以我懒加载它们。

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

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

【问题讨论】:

    标签: iphone lazy-loading


    【解决方案1】:
    1. 为什么willbegindecelerating方法中的代码是这样的?最好将它放在scrollviewdidscroll 方法中,以便尽快开始加载。

    2. 您不应从单独的线程修改任何视图,因为视图绘制不是线程安全的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 2010-10-06
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多