2

在 Apples WWDC 2012 的 Video Session 506 中,他们展示了一款用于高性能绘图的绘画应用程序(因此帧速率永远不会低于 30)。

我试图复制代码,但在多个点上卡住了。

我正在寻找的是一个基本的绘图应用程序(线条、正方形、圆形、贝塞尔路径),即使在绘制了数百条线之后,它也表现良好。

基本方法是在绘制一定数量的线条(或圆形贝塞尔路径等)后将其保存到图像中,然后只刷新新的绘图,因此不必重新绘制所有已经绘制的线条。

但不知何故,我从来没有达到更高的性能。我需要如何实现这个?我需要多层吗?以及如何管理不是视图中的所有图层都被重绘,而只是某个子图层?

如果有人可以为我提供一个在图层上绘制几条线的简短示例,然后将该图层保存到图像中,然后在其上绘图,我将非常感激。

感谢您为重新创建 iPaint 应用程序提供的任何帮助,遗憾的是无法从 Apple 下载该应用程序。

4

2 回答 2

1

我没有看那个会话,但是传统的 Quartz 加速是使用 CGLayers(不是 CALayers)。您可以将 CGLayer 视为缓存的绘图,它可能是位图,也可能不是位图(系统决定如何最好地缓存它)。如果您有一个支持位图上下文,您可以将其用作您的“图像”并在您认为合适的时候将 CGLayers 绘制到其中(然后丢弃图层)。阅读 CGLayer(它在 Quartz 文档中),然后看看这是否是他们在那次会议上讨论的内容。

于 2012-09-11T11:37:07.527 回答
1

这只是难题的一半。另一半是只刷新视图的最小可能区域(通过setNeedsDisplayInRect:)。但是,我通过 Core Graphics 经历了许多不同的绘图方式。缓存很好,但我不再使用它了。我如上所述设置更新矩形,然后在我描边之前测试每个路径(测试很快,描边很慢)。如果它在更新框中,我会抚摸它,否则我会忽略它。

于 2012-09-11T12:40:21.280 回答