【发布时间】:2011-05-26 10:05:49
【问题描述】:
我混淆了CGLayer 和CALayer。它们看起来很相似,那么为什么会有单独的实现呢? CGLayer 和 CALayer 之间有什么区别和兼容性?
【问题讨论】:
标签: cocoa core-graphics calayer cglayer
我混淆了CGLayer 和CALayer。它们看起来很相似,那么为什么会有单独的实现呢? CGLayer 和 CALayer 之间有什么区别和兼容性?
【问题讨论】:
标签: cocoa core-graphics calayer cglayer
它们完全不同,不兼容。
绝对清楚:
纯属巧合在两个名称中都使用了“层”这个词;它们完全不相关。
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 应该被称为“工作区”或“计算范式”或类似的名称。
【讨论】: