Dmi*_*nko 2 cocos2d-iphone ios
我正在开发另一个带有画布的绘图应用程序,它比屏幕大很多倍.我需要一些建议/指导如何做到这一点.
基本上我想要的是滚动这个大画布,只在可见区域绘制.我在考虑两种方法:
如果这很重要,我正在使用cocos2d作为原型.
忘记2000x200限制,我有一个开源项目,绘制18000 x 18000 NASA图像.
我建议你把这个任务分成两部分.首先,滚动.正如CodaFi所建议的,滚动时你会提供CATiledLayers.每个都是你创建的CGImageRef--你真正巨大的画布的子图像.然后,您可以轻松支持放大和缩小.
第二部分是与用户交互以绘制或以其他方式影响画布.当用户停止滚动时,您将创建一个不透明的UIView子类,您将其作为子视图添加到主视图中,覆盖托管CATiledLayers的视图.在您需要显示此视图的那一刻,您可以使用正确的信息填充它,以便它可以正确地绘制较大画布的那一部分(比如这样的一个圆圈和这样的颜色等).
您可以使用此叠加视图的drawRect:方法进行绘制.因此,当用户采取更改视图的操作时,您可以根据需要执行"setDisplayInRect:"以强制iOS调用drawRect:.
当用户决定滚动时,您需要使用用户所做的任何更改来更新大型画布模型,然后移除不透明叠加层,并让CATiledLayers绘制大图像的正确部分.这种转变可能是避免视觉故障的过程中最棘手的部分.
假设您有一大堆用于画布的对象定义.当您需要为图块创建CGImageRef时,您将扫描它以查找对象框架和图块框架之间的重叠,然后只绘制该图块所需的那些项目.