CGLayer和CALayer有啥区别和兼容性?
Posted
技术标签:
【中文标题】CGLayer和CALayer有啥区别和兼容性?【英文标题】:What's the difference and compatibility of CGLayer and CALayer?CGLayer和CALayer有什么区别和兼容性? 【发布时间】:2011-05-26 10:05:49 【问题描述】:我混淆了CGLayer
和CALayer
。它们看起来很相似,那么为什么会有单独的实现呢? CGLayer
和 CALayer
之间有什么区别和兼容性?
【问题讨论】:
【参考方案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有啥区别和兼容性?的主要内容,如果未能解决你的问题,请参考以下文章