如何在UIScrollView中滚动无限大小的UIView

Ed *_*rty 7 cocoa-touch

我正在尝试绘制一个水平无限大的图形,与屏幕的高度相同.我在其中添加了一个UIScrollView和一个UIView的子类,它实现了该-drawRect:方法.在模拟器中,一切正常,但在设备上,它似乎无法在图形达到一定大小后绘制.

我已经尽可能地缓存了所有内容,并且基本上只在该-drawRect:部分中调用CGContextAddLineToPoint .我只画出屏幕上可见的内容.我有一个UIScrollView的委托,它监听-scrollViewDidScroll:,然后告诉图形重绘自己([graphView setNeedsDisplay]).

我发现一个方法告诉我重写+layerClass方法并返回[CATiledLayer class].这确实允许图形实际在设备上绘制,但它的功能非常差.实际绘制的速度非常慢,并且发生的淡入淡出是不可取的.

有什么建议?

Ed *_*rty 3

好吧,这是我的答案:我基本上做了类似于 UITableView 如何处理单元格的操作:我有一个 GraphView 对象的 NSMutableSet,它存储未使用的图形。当滚动视图的一部分变得可见时,我从该集合中获取一个图形视图(或者如果该集合为空,则创建一个新视图)。它已经有一个scrollX属性来确定应该绘制它的哪一部分。我将scrollX属性设置为正确的值,并且不使用屏幕宽度,而是给它一个任意的绘制宽度。当它离开滚动视图时,它会从 UIScrollView 中删除并添加到集合中。

我想知道当它们离开视野时我是否真的需要将它们移除?仅当我收到内存不足警告时,尝试将它们留在屏幕上并删除不在屏幕上的那些可能是谨慎的做法?每当需要重新绘制未更改的图形部分时,这可能会消除暂停。

我的可取之处是我的 GraphView 已经设置为仅绘制图表的一部分。那时我所需要做的就是制作不止一个。