代码之家  ›  专栏  ›  技术社区  ›  Kornel

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

  •  2
  • Kornel  · 技术社区  · 16 年前

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

    接口生成器的大小限制为10000像素。这是人为的限制还是背后有充分的理由?

    我应该创造一个巨大的视野,让 NSSCRelVIEW /Quartz担心高效地呈现它(我的视图是在 drawRect )或者我是否有过多的内存使用和其他问题的风险?(例如,OS X是否可以随时尝试将整个视图的位图缓存到视频内存中?)

    2 回复  |  直到 12 年前
        1
  •  1
  •   kperryua    16 年前

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

    所以,答案是肯定的。继续,把你的观点扩大到你想要的程度。

    (当然,您需要将视图中的绘图限制为传入的rect drawRect: 否则你会浪费很多时间去做看不见的绘画。)

        2
  •  0
  •   Peter Hosey    16 年前

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

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

    这是400 MB的原始rgba像素 查看。如果我们真的很悲观,那么假设nsview为您提供了双重缓冲,在这种情况下,您的内存使用量将加倍到800MB。

    在最坏的情况下,你的用户在一个旧的Mac mini上运行你的应用程序,其中1 GB的RAM_,你刚刚使用了80%。在这一点之前,系统肯定会启动寻呼方式,使其系统的速度无法忍受。

    另一方面,这是我能想到的实现它的最简单的方法,所以我说尝试一下,看看活动监视器对您的内存使用情况说了些什么。如果太高,请尝试更改滚动视图和剪辑视图的各种选项;如果这不起作用,我只能考虑自己制作滚动条并进行伪装。

    推荐文章