UIScrollView懒惰加载图片

时间:2015-11-29 19:46:30

标签: ios objective-c uiscrollview

我的iPhone应用包含170张图片。我将它们读入一个数组,并在循环中在取景器中添加一张图片,然后将图像视图作为滚动视图的子视图。

运行我的应用程序时使用的内存太多700mb。我试图减小图片的大小,但它没有用。

我的一位朋友说我应该只添加#1和#2图像。当用户块滚动到1号图片时,则只显示图片2号。然后删除图片1号从图像查看器中添加第3张图片。

他说通过这种方式我可以维持正常的内存消耗。但我不明白该怎么做?

你能举个例子吗?提前谢谢。

不使用UICollectionView

这是我的代码:

- (void)addImageViewToScrollView {
    _assetsArray = [[NSMutableArray alloc] init];
    for (int j = 0; j < 170; j++) {
        [_assetsArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d",j]]];
    }

    //scrollView add subview ImageView
    for (int i = 0; i < [_assetsArray count]; i++) {
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width *i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;
        _imageView = [[UIImageView alloc]init];
        _imageView.image = [_assetsArray objectAtIndex:i];
        _imageView.frame = frame;
        [self.scrollView addSubview:_imageView];
    }
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * self.assetsArray.count, self.scrollView.frame.size.height);
}

-

enter image description here

2 个答案:

答案 0 :(得分:0)

使用UICollectionViewController解决此问题。

这样,当您点击内存警告时,只会加载屏幕上所需的单元格,并且可以从缓存中弹出所有其他图像。

集合视图与表视图非常相似。

要使集合视图适合您正在进行的操作,您需要将流程布局设置为水平滚动,并将单元格大小设置为视图的高度和宽度。

答案 1 :(得分:0)

似乎您尝试使用170UIScrollView图片添加到UIImageView.上为什么不使用专用的UITableView'sUICollectionView'sReusable Cell的对象是为了维持运行时内存消耗。让我们回顾一下,

  1. 您有170个ImageViews(_assetsArray);昂贵的消费
  2. 您有170张图片
  3. 对比,使用 UITableView UICollectionView

    1. 在包含170行的单元格中有1个ImageView
    2. 您已加载了170张图片DataSource
    3. 当需要显示对应于DataSource
    4. 时,您的单元格将重新循环

      此外,为了支持众多图像,有很好的库来减少图像缓存。尝试使用 SDWebImage FastImageCache 。我个人喜欢FIC,但你可能需要理解这个概念。