绘制到非常大的图形上下文的最佳实践

时间:2011-12-17 09:50:12

标签: iphone objective-c quartz-graphics

我需要绘制一个非常非常宽的上下文(可能会进入宽度为100,000的像素)

我绘制的东西很简单(只有线条,椭圆和圆弧)。

目前,我正在使用平铺机制将此图像的片段呈现为位于UIScrollView中的UIWebViews中的SVG图形。可怕,我知道。表现太差了,这让我想要伤害自己。

所以我别无选择,只能直接在Quartz中绘制东西。问题是我找不到任何有关处理如此大图的好信息。

命令将存储在一个数组中(即[0] - 从x1,x2到y1,2 [2]的行 - 在x1,x2,h,v等处的弧...)这使得它可以立即确定在任何时间点需要绘制的内容。

我应该如何最好地处理实际绘图?制作一个巨大的背景,然后画上它,擦除屏幕上的部分?我可以直接进入UIScrollView吗?

或者我应该进行某种平铺?创建较小的视图并在其上绘图?

2 个答案:

答案 0 :(得分:2)

查看CATiledLayer。它支持巨大的尺寸,但只绘制可见的“瓷砖”。这意味着在您的drawLayer:inContext:中,您需要计算如何绘制您要求绘制的图块。实现起来可能相当复杂,但性能提升弥补了这一点。我使用它来绘制一个通常超过20,000像素宽的“条带”,平铺成256像素块(这是默认值)。

你不仅因为速度而且还因为内存而想要这样:如果你真的有一个视野或层那么大,它会占用大量的内存。平铺是这里唯一的解决方案。

请参阅this nice article by Michael Heyeck关于如何使用CATiledLayer(Apple也有一个演示,但我认为链接的文章更好)。

答案 1 :(得分:0)

如果你绘制的东西不是静态的,那么使用CATiledLayer不能很好地工作。部分在http://www.mlsite.net/blog/?p=1342中提供了更好的解决方案。我用它作为一些交互式绘图的基础。有点慢但我还在优化。使用http://red-glasses.com/index.php/tutorials/catiledlayer-how-to-use-it-how-it-works-what-it-does/作为是否应使用CATiledLayer的检查列表。