在没有 CATiledLayer 的情况下渲染 Scrollview 容器中的巨大网格?

Posted

技术标签:

【中文标题】在没有 CATiledLayer 的情况下渲染 Scrollview 容器中的巨大网格?【英文标题】:Rendering of a vast grid in a Scrollview container without CATiledLayer? 【发布时间】:2012-08-21 09:39:28 【问题描述】:

我正在寻找有关如何拥有相当大的滚动视图(比如说 8192x8192)的任何建议,它本质上是一个网格,其中放置了大约 5-100 个按钮的子视图。

蛮力方法耗尽内存,因为 CALayer 似乎正在为滚动视图内容的大小分配位图(使用缩放时内存问题尤其突出)

接下来我在其中添加了 CATiledLayer,这解决了内存问题,但由于图块是异步生成的,因此网格上的效果很模糊,并且仍然不理想,因为它使用大量内存来进行本质上是微不足道的“绘制”一些线路的任务。

似乎如果我能以某种方式控制通过 OpenGL 每帧绘制我自己的网格并告诉 UIKit 不要为滚动视图创建位图缓冲区,那将是完美的,但不确定这是否可行甚至是正确的方法?

android 上,我只是控制了整个绘图/缩放/平移,但在似乎已经提供大部分功能的 ios 上,这似乎太过分了?

【问题讨论】:

有一个提示,添加子视图可能是这样做的方式(即网格的每一行的矩形)但是我不能让它与缩放一起工作...... 几年前(2009 年?)有一个 WWDC 视频,我认为它被称为“掌握滚动视图”,它详细描述了如何进行平铺滚动视图,这听起来像你想要的如果 CATiledLayer 的异步性不可接受。也许检查一下,看看是否满足您的需求。 您好 Carl,如果您在此处回复,很高兴将此标记为答案。我目前选择了 CATiledLayer 方法,但会重新考虑它。 【参考方案1】:

您应该查看 WWDC 2009 视频会话 102:“掌握 iPhone 滚动视图”以及 Apple 的 ScrollViewSuite 示例项目。他们解释了如何使用不同的缩放级别进行平铺滚动视图,这听起来像是您所需要的。

【讨论】:

知道在哪里(拥有开发者帐户)可以找到这些视频吗?购买选项似乎消失了。 我想你可以得到它here

以上是关于在没有 CATiledLayer 的情况下渲染 Scrollview 容器中的巨大网格?的主要内容,如果未能解决你的问题,请参考以下文章

CATiledLayer 显示以前的图块

使用 CATiledLayer,渲染时 Tiles 之间的细线,使用 ImageMagick 生成的瓷砖

UIScrollView w/ Large CATiledLayer + Overlay 可以快速渲染

在 CATiledLayer 中预加载/预显示图块?

CATiledLayer 的背景图像

如何从我的 CATiledLayer 中移除这些旋转伪影?