我需要绘制一个非常非常宽的上下文(可能会进入宽度为100,000的像素)
我绘制的东西很简单(只有线条,椭圆和圆弧)。
目前,我正在使用平铺机制将此图像的片段呈现为位于UIScrollView中的UIWebViews中的SVG图形。可怕,我知道。表现太差了,这让我想要伤害自己。
所以我别无选择,只能直接在Quartz中绘制东西。问题是我找不到任何有关处理如此大图的好信息。
命令将存储在一个数组中(即[0] - 从x1,x2到y1,2 [2]的行 - 在x1,x2,h,v等处的弧...)这使得它可以立即确定在任何时间点需要绘制的内容。
我应该如何最好地处理实际绘图?制作一个巨大的背景,然后画上它,擦除屏幕上的部分?我可以直接进入UIScrollView吗?
或者我应该进行某种平铺?创建较小的视图并在其上绘图?
答案 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的检查列表。