将图像视图加载到 UIScrollView 和性能

Posted

技术标签:

【中文标题】将图像视图加载到 UIScrollView 和性能【英文标题】:Loading UIImageViews into a UIScrollView and peformance 【发布时间】:2010-01-01 17:31:54 【问题描述】:

我有一个带有三个 UIScrollViews 的 UIView。我用已经分配了图像的自定义 UIImageView 加载每个。自定义 UIImageViews 很简单,只引入了一些新属性,允许跟踪滚动视图中的图像视图。

图像从磁盘加载非常快。下面的代码执行得非常快,但是每个图像视图我必须等待大约六秒钟,然后滚动视图中才会出现任何内容。如果我尝试加载所有图像,应用程序将崩溃

Program received signal:  “0”.

通常是内存不足错误。照片来自手机的照片库。查看模拟器中使用的图像,它们的大小从 213KB 到 401KB 不等。我显然做错了什么,但不确定是什么。

我可能会使用 tableview,因为它确实允许分页,但我不确定 tableview 是否会有更好的性能。我想滚动视图的问题是所有的图像视图都必须在滚动视图中一次加载,而不是延迟加载。由于图像视图已经加载到(单例)字典中,为什么将它们加载到滚动视图中需要这么长时间?所有的 UI 都是在 IB 中完成的。

一般来说,有没有更好的方法?

这是将图像视图加载到滚动视图中的代码:

- (void) addImageViewsToScrollView:(NSMutableDictionary*)imageViews scrollView:(UIScrollView*)scrollView


int widthRunningTotal = 0;
int count = 0;

for(NSString *s in [imageViews allKeys])
    CustomImageView *myImageView = [imageViews valueForKey:s];
    myImageView.imageName = s;
    myImageView.imageId = count;
    myImageView.frame = CGRectMake(widthRunningTotal, 0, 160, 100);
    myImageView.contentMode = UIViewContentModeScaleAspectFit;
    [scrollView addSubview:myImageView];
    widthRunningTotal += 160;
    count++;

scrollView.contentSize = CGSizeMake(widthRunningTotal, 100);

【问题讨论】:

【参考方案1】:

这段代码多久被调用一次?我没有看到你删除现有子视图的任何地方,所以如果这种情况发生多次,你最终会得到很多子视图。

【讨论】:

每次加载此视图时都会发生。用户可以从另一个视图添加新图像,因此我再次加载所有图像视图,允许显示新图像。我应该在退出视图时删除图像视图吗?但是,第一次加载此视图时会出现内存问题。 不,如果您在每次视图实例化时从不多次调用它,那没关系。我会尝试只加载一个视图,看看会发生什么。 我有 16 张图片用于 scrollview1。我已经禁用了其他两个滚动视图的加载。等待图像出现 30 秒,应用程序收到内存警告。我滚动第一张图片并收到另一个内存警告。滚动第二个图像会导致出现旋转动画,并且应用程序崩溃并显示“程序接收信号:'0'”。这仅在设备上。模拟器很快。

以上是关于将图像视图加载到 UIScrollView 和性能的主要内容,如果未能解决你的问题,请参考以下文章

保存并加载用户缩放到的内容 uiscrollview ios

将一页 UIScrollView 保存到图像

将 UIImage 定位在 UIScrollView 的中心进行缩放

在 UIScrollView 中拍摄 CATiledLayer 支持的视图的图像快照

快速从uiscrollview中的解析加载图像

UIView 未显示在 UIScrollView 中