如何在Cocoa中实现非常大的滚动视图

时间:2009-07-30 21:16:25

标签: cocoa quartz-graphics nsview

在Cocoa中创建大小约为15000像素的视图是否明智? (当然,NSScrollView

中只能看到此视图的一小部分

Interface Builder的大小限制为10000像素。这是一个人为的限制还是背后有充分的理由?

我是否应该创建巨大的视图并让NSScrollView / Quartz担心有效地呈现它(我的视图是在drawRect中请求的区域内以编程方式绘制的),还是冒着过多的内存使用和其他问题的风险? (例如,OS X是否可以随时尝试在视频内存中缓存整个视图的位图?)

2 个答案:

答案 0 :(得分:1)

视图没有后备存储,除非它们是图层支持的。该窗口具有后备存储,因此用于显示视图的内存量仅限于窗口大小。

所以,答案是肯定的。来吧,让你的意见尽可能大。

(当然,你需要将你在视图中所做的绘图限制为drawRect:中传递的矩形,否则你将浪费大量时间进行隐形绘制。)

答案 1 :(得分:0)

好吧,如果Cocoa确实尝试将整个视图缓存在内存中,那将是一个问题:

10000 * 10000 = 100,000,000
* 4 = 400,000,000

一个视图的原始RGBA像素为400 MB。如果我们想要非常悲观,假设NSView是双缓冲的,在这种情况下,你的内存使用量翻倍至800 MB。

在最糟糕的情况下,您的用户正在使用1 GB RAM的旧Mac mini上运行您的应用程序 - 您刚刚使用了80%。系统肯定会在此之前开始寻呼方式,使他们的系统变得无法忍受。

另一方面,这是我能想到的实现它的最简单方法,所以我说试试看看Activity Monitor对你的内存使用情况的看法。如果它太高,请尝试更改滚动视图和剪辑视图的各种选项;如果这不起作用,除了制作你自己的卷轴并伪造它之外别无他法。