在Apples 2012的视频会议506上,他们展示了一款为高性能绘图而设计的绘画应用程序(因此帧率永远不会低于30)。
我试图复制代码,但在多个点上卡住了。
我正在寻找的是一个基本的绘图应用程序(线,正方形,圆,贝塞尔曲线路径),即使在数百条线已经被绘制后表现良好。
基本方法是在绘制了一定数量的线条(或圆圈或路径等)后将其保存到图像中,然后只刷新新图形,因此不必重新绘制所有已经绘制的线条。
但不知何故,我从来没有达到更高的表现。我需要如何实现它?我需要多层吗?我如何管理视图中的所有层都被重绘,而只是某个子层被重绘?
如果有人能为我提供一个在图层上绘制几条线的简短示例,然后将该图层保存为图像,然后在其上绘制,我将非常感谢。
感谢您帮助我们重新创建iPaint应用程序,遗憾的是,该应用程序无法从苹果下载。
发布于 2012-09-11 20:40:21
这只是拼图的一半。另一半是只刷新视图的最小可能区域(通过setNeedsDisplayInRect:)。然而,我已经通过Core Graphics经历了许多不同的绘图方式。缓存很好,但我不再使用它了。我像上面一样设置了更新矩形,然后在我描边之前测试每条路径(测试很快,描边很慢)。如果它在更新框内,我会点击它,否则我会忽略它。
发布于 2012-09-11 19:37:08
我没有看那次会议,但是传统的Quartz加速是使用CGLayers (而不是CALayers)。您可以将CGLayer视为缓存的图形,它可能是位图,也可能不是位图(系统决定如何最好地缓存它)。如果你有一个背景位图上下文,你可以使用它作为你的“图像”,并在你认为合适的时候将CGLayers绘制到其中(然后丢弃这些层)。阅读CGLayer (在Quartz文档中),然后看看这是否是他们在那次会议中谈论的内容。
https://stackoverflow.com/questions/12368710
复制相似问题