代码之家  ›  专栏  ›  技术社区  ›  Mike Furtak

使用核心动画/calayer进行简单的分层绘制

  •  1
  • Mike Furtak  · 技术社区  · 15 年前

    我想创建一个采用分层方式绘制的自定义nsview。我想大多数图层的宽度和高度与背景视图相同。

    使用像calayer这样的核心动画类来完成这个任务是否合适,即使我不希望需要太多动画?有更合适的方法吗?

    要澄清的是,视图并不意味着像photoshop应用程序中的画布。它更像是一个数据显示,应该允许用户交互(选择、移动、滚动等)。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Brad Larson    15 年前

    如果你想要的是显示和布局,我会说基于加莱尔的架构是个不错的选择。对于开源 Core Plot framework 我们把所有的图表和绘图元素从容器中构造出来,并将它们组织成一个规则的层次结构。Calayers很轻,在Mac和iPhone之间使用几乎相同的API。它们甚至可以用来响应触摸或鼠标事件。

    对于基于calayer的用户界面的另一个示例, my iPhone application 整个方程式输入界面由炉管组成,包括从下面向上滑动的菜单。性能稍好于以前基于uiview的实现,但相同的代码也适用于应用程序的初步桌面版本。

        2
  •  2
  •   Alex    15 年前

    对于绘图程序,我认为保存位图数据的缓冲区很重要。使用 CALayer 那是 contents 属性是 CGImageRef .要将其转换回图形上下文以进行进一步的绘图可能有点困难。您必须初始化一个新的上下文,将位图数据绘制到其中,然后执行您想要执行的任何绘制操作,最后将其转换回 CGIMAGE . 您可能无法避免执行大量的内存分配,这实际上保证会使您的程序慢下来。

    我会考虑为每一层保留一个屏幕外缓冲区。看看石英 CGLayerRef 对象。我认为它可能会做你想做的:它是一个屏幕外的缓冲区,可以保存你可能想要反复绘制的内容。你也可以很快得到 CGContextRef 任何时候你需要它,这样你可以做额外的绘图。你可以一直用它 CGTraceTrimf 具有 NSGraphicsContext 如果要使用Cocoa绘制方法。