0

在我的应用程序中,我有一个滚动视图,一个更大的滚动视图,上面有很多子视图,子视图会根据滚动动态添加。我尝试在滚动时动态添加子视图(图像视图),当用户滚动时,我尝试根据 pageSize 等从服务器异步获取更多图像,并将这些图像放入相应的图像视图中。

我也经历过 Apple 的 WWDC Session 104,这似乎对离线图像很有用。

我还尝试按比例调整滚动视图上的图像大小,我相信这很好。问题是当滚动视图上的图像数量增加时,应用程序内存不足。这一定是由于我直接在图像视图中使用图像而不是使用 CATiledLayer。但是,我正在寻求使用 CATiledLayer 在滚动视图上显示异步图像的帮助。

非常感谢,

雷诺琼斯

4

2 回答 2

0

我根据评论完全编辑了答案。

您应该将控制器设置为滚动视图的委托,而不是在 scrollViewDidScroll: (或在 scrollViewDidEndDecelerating: 如果您想减少检查频率)方法中,您可以检查您的某些图像是否在内容视图的可见部分之外,然后释放(即设置指针为零)他们节省一些内存。

为方便起见,这里有一个示例如何获取内容的可见部分:

CGRect visibleRect;
visibleRect.origin = scrollView.contentOffset;
visibleRect.size = scrollView.bounds.size;

应该释放完全超出该矩形的所有内容(当然,如果用户滚动,您必须重新加载它们:不断加载/卸载可能会很棘手......)

于 2013-01-23T21:13:24.083 回答
0

简而言之,这就是我所做的一切.. 我已经异步下载图像并将它们缓存在设备上,然后我向当前的 tile 类添加了一个 UIImage (imageObject) 属性,该属性保存正在下载然后实现的图像对象以下并为我做了诀窍。信不信由你,imageview 加载与 CATiledLayer - CATiledLayer 的速度和效率提高了 100 倍。

+ layerClass
{
    return [CATiledLayer class];
}

- (void)drawRect:(CGRect)rect
{
    [imgObject drawAtPoint:CGPointMake(0,0)];
}

希望它在未来对其他人有所帮助。如果我能提供更多帮助,请告诉我。

于 2013-01-25T13:25:11.507 回答