绘画应用程序与巨大的画布

Dmi*_*nko 2 cocos2d-iphone ios

我正在开发另一个带有画布的绘图应用程序,它比屏幕大很多倍.我需要一些建议/指导如何做到这一点.

基本上我想要的是滚动这个大画布,只在可见区域绘制.我在考虑两种方法:

  1. 有64x64(或其他)"瓷砖"可以绘制,然后滚动只需加载新的瓷砖.
  2. 记录所有用户笔划(点)和滚动计算指定区域,并仅使用屏幕大小的画布绘制它们.

如果这很重要,我正在使用cocos2d作为原型.

Dav*_*d H 5

忘记2000x200限制,我有一个开源项目,绘制18000 x 18000 NASA图像.

我建议你把这个任务分成两部分.首先,滚动.正如CodaFi所建议的,滚动时你会提供CATiledLayers.每个都是你创建的CGImageRef--你真正巨大的画布的子图像.然后,您可以轻松支持放大和缩小.

第二部分是与用户交互以绘制或以其他方式影响画布.当用户停止滚动时,您将创建一个不透明的UIView子类,您将其作为子视图添加到主视图中,覆盖托管CATiledLayers的视图.在您需要显示此视图的那一刻,您可以使用正确的信息填充它,以便它可以正确地绘制较大画布的那一部分(比如这样的一个圆圈和这样的颜色等).

您可以使用此叠加视图的drawRect:方法进行绘制.因此,当用户采取更改视图的操作时,您可以根据需要执行"setDisplayInRect:"以强制iOS调用drawRect:.

当用户决定滚动时,您需要使用用户所做的任何更改来更新大型画布模型,然后移除不透明叠加层,并让CATiledLayers绘制大图像的正确部分.这种转变可能是避免视觉故障的过程中最棘手的部分.

假设您有一大堆用于画布的对象定义.当您需要为图块创建CGImageRef时,您将扫描它以查找对象框架和图块框架之间的重叠,然后只绘制该图块所需的那些项目.