Iphone 在非常大的图形环境中绘图的最佳实践

Iphone 在非常大的图形环境中绘图的最佳实践,iphone,objective-c,quartz-graphics,Iphone,Objective C,Quartz Graphics,我需要画一个非常非常宽的背景(可能是10万像素宽) 我画的东西很简单(只画直线、椭圆和圆弧) 目前,我正在使用一种平铺机制在UIScrollView中的UIWebViews中将此图像的各个部分渲染为SVG图形。太可怕了,我知道。表演太差了,让我想伤害自己 所以我别无选择,只能直接用石英画东西。问题是,我找不到处理这么大的图纸的好信息 命令将存储在一个数组中(即从x1、x2到y1的[0]-线,x1、x2、h、v等处的[2]-弧),这使得可以立即确定在任何时间点需要绘制什么 我应该如何处理实际的图纸

我需要画一个非常非常宽的背景(可能是10万像素宽)

我画的东西很简单(只画直线、椭圆和圆弧)

目前,我正在使用一种平铺机制在UIScrollView中的UIWebViews中将此图像的各个部分渲染为SVG图形。太可怕了,我知道。表演太差了,让我想伤害自己

所以我别无选择,只能直接用石英画东西。问题是,我找不到处理这么大的图纸的好信息

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

我应该如何处理实际的图纸?制作一个巨大的背景,然后画在上面,删除屏幕外的部分?我可以直接画进UIScrollView吗

还是我应该做些平铺?创建较小的视图并在其上绘图?

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

你想要这样做不仅是因为速度,也是因为内存:如果你真的有那么大的视图或图层,它会占用大量的内存。瓷砖是这里唯一的解决方案


请参阅如何使用CATiledLayer(Apple也有一个演示,但我认为链接的文章更好)。

如果您正在绘制的内容不是静态的,那么使用CATiledLayer就不太好。本文部分介绍了一种较好的解决方案。我用它作为一些交互式绘图的基础。有点慢,但我仍在优化。用作是否应使用CATiledLayer的检查列表。

太好了!这听起来正是我需要的。