CGLayer和CALayer有啥区别和兼容性?

Posted

技术标签:

【中文标题】CGLayer和CALayer有啥区别和兼容性?【英文标题】:What's the difference and compatibility of CGLayer and CALayer?CGLayer和CALayer有什么区别和兼容性? 【发布时间】:2011-05-26 10:05:49 【问题描述】:

我混淆了CGLayerCALayer。它们看起来很相似,那么为什么会有单独的实现呢? CGLayerCALayer 之间有什么区别和兼容性?

【问题讨论】:

【参考方案1】:

它们完全不同,不兼容。

绝对清楚:

纯属巧合在两个名称中都使用了“层”这个词;它们完全不相关

CGLayers 是一种“特殊”“高性能”的东西。

您可以认为它们“像位图,但更好。”

Apple 坐下来说:“我们厌倦了使用位图的人,让我们把东西做得更好吧!” :-)

确实,您只能使用 CGLayersoffscreen

重复一遍,CGLayers 完全在屏幕外使用。

一旦它们准备就绪,您就可以将它们投射到您的实际屏幕上(也就是说:将它们投射到您的一个视图上)。

(然而:请注意:CGLayers 经常“单独”使用。当我说它们“单独”使用时,我的意思是它们用于:图像处理或数学计算。在这种情况下, CGLayers 从未出现在屏幕上,它们与屏幕世界完全没有联系。)

相比之下... CALayers 只是“在”视图中的东西。 CALayers 就是视图的工作方式。

所以这两个概念完全不同。

CALayers 只是视图中的东西。 相比之下,CGLayer 是 Apple 很酷的“离屏、高性能、计算机器”。

需要明确的是,CGLayers 与视图完全没有联系,也与视图没有关联。 (当然,您可以将 CGLayer 粘贴到视图中,但随后,您可以将“排版”或“图像”粘贴到视图中。排版和图像不是视图,CGLayer 也不是视图。)

典型的例子是这样的:

你想画一次复杂的东西,然后在屏幕上画很多次。这个问题的答案正是 CGLayers。您的“工作区”将是 CGLayer;然后,您可以将其粘贴到打印机、屏幕或其他任何地方。

需要明确的是,在我看来,Apple 应该选择一个不同的名称 ...

一个好名字应该是“CGCalculationSpace”。

名称中包含“layer”一词的事实让您想到了 NSLayers。

重复一遍:绝对没有任何关系,无论如何,以任何方式。 CGLayer 甚至与图层没有模糊的关系。

根本没有联系。名字中使用了“l a y e r”字母真的很令人困惑——真可惜!!

CGLayers 应该被称为“工作区”或“计算范式”或类似的名称。

【讨论】:

非常感谢!我完全阅读了这篇文章。这是很好的描述,非常有帮助。特别是关于 CGLayer 与 CALayer =“屏幕外合成”与“实时合成”和“不兼容”。我对您的描述有所了解; CALayer 是 CGLayer 的一个抽象的 OO 模型。(场景图?)无论如何,再次感谢! 我重新阅读了您的答案,我意识到我有一个误解。 CGLayer 与 CALayer 无关。 CGLayer 是绘图工具的一部分,CALayer 是合成器的一部分。

以上是关于CGLayer和CALayer有啥区别和兼容性?的主要内容,如果未能解决你的问题,请参考以下文章

EMV和EMC具体有啥区别

activemq消息队列和kafka有啥区别

xp系统和vista有啥区别

ANGLE 和 Skia 图形引擎有啥区别?

Java, Stringtokenizer和String split有啥区别?

IP V6和IP V4有啥区别?如何兼容?