我让CGLayer
和CALayer
感到困惑。它们看起来很相似,为什么还有单独的实现呢? CGLayer
和CALayer
之间的区别和兼容性是什么?
答案 0 :(得分:120)
它们完全不同,而且不兼容。
绝对清楚:
严格地说是巧合在两个名称中都使用了“layer”这个词;他们完全不相关。
CGLayers是一种“特殊的”“高性能”的东西。
您可以将它们视为“像位图,但更好。”
苹果坐下来说:“我们厌倦了使用位图的人,让我们做出更好的事情!” : - )实际上,您只能使用CGLayers 屏幕外 。
重复一遍,CGLayers完全在屏幕外使用。
一旦他们准备好了,你就可以将它们放到你的实际屏幕上(也就是说:将它们放到你的一个视图上)。
(然而:请注意:CGLayers通常单独使用。)当我说它们单独使用时,我的意思是它们用于:图像处理或数学计算。在这种情况下,CGLayers永远不会出现在屏幕上,它们与屏幕世界完全没有联系。)
相比之下...... CALayers就是“in”视图中的东西。 CALayers就是视图的工作方式。
所以这两个概念完全不同。
CALayers只是“在”视图中的内容。 相比之下,CGLayers是Apple酷炫的“屏幕外高性能计算机器”。
要明确的是,CGLayers与观点完全没有联系,也没有与观点相关联。 (当然,您可以将CGLayer粘贴到视图中,但是,您可以将“排版”或“图像”粘贴到视图中。排版和图像不是视图,CGLayers不是视图。)
典型的例子是:
你想画一些复杂的东西,然后在屏幕上多次画那个东西。这个问题的答案正是CGLayers。你的“工作区”将是一个CGLayer;然后你可以将它打到打印机,屏幕或其他任何地方。
要明确,在我看来,Apple应该选择一个不同的名字 ......
一个好名字就是“CGCalculationSpace。”
名称中包含单词“layer”的事实让你想到了NSLayers。
重申:绝对没有任何关系,无论如何。 CGLayers甚至与层无关联。
完全没有联系。在名字中使用字母“l a y e r”真是令人困惑 - 这真是太可惜了!
CGLayers应该被称为“工作空间”或“计算范例”或类似的东西。
希望它有所帮助,希望你还在阅读!