我对 CGLayer
和 CALayer
感到困惑。它们看起来很相似,为什么需要有单独的实现? CGLayer
和 CALayer
有何区别和兼容性?
我对 CGLayer
和 CALayer
感到困惑。它们看起来很相似,为什么需要有单独的实现? CGLayer
和 CALayer
有何区别和兼容性?
它们是完全不同的,且不兼容。
为了绝对清楚:
这只是一个巧合,"层"这个词在两个名称中都被使用; 它们是完全无关的。
CGLayer 是一种“特殊”的“高性能”东西。
你可以认为它们“像位图,但更好。”
苹果公司曾说过“我们厌倦了人们使用位图,让我们创造出更好的东西!” :-)
事实上,你只能离屏幕使用 CGLayers。
再强调一遍,CGLayers 只用于离屏渲染。
一旦准备好了,你就可以把它们显示到你的实际屏幕上 (也就是说: 把它们显示到你的其中一个视图上)。
(然而注意:CGLayers 经常被“单独”使用。当我说它们被“单独”使用时,我指的是它们用于图像处理或数学计算。在这种情况下, CGLayers 从未在屏幕上看到,它们与屏幕世界毫无联系。)
相反地... CALayers 简单来说就是视图中的东西。CALayers 就是视图的工作方式。
所以这两个概念都是完全不同的。
CALayers 只是视图中的东西。相比之下,CGLayers 是苹果公司的“离屏幕高性能计算机器”。
要明确的是, CGLayers 与视图没有任何关联和联系。(当然,你可以把 CGLayer 粘贴到视图中,但是你也可以像粘贴“排版设计”或“图像”那样将 CGLayer 粘贴到视图中,而这些并不是视图, CGLayers 也不是视图。)
一个典型的例子是:
如果你希望在屏幕上多次绘制某些复杂的内容,那么CGLayers正是解决这个问题的答案。你的“工作区”将成为一个CGLayer,然后你可以将其传输到打印机、屏幕或其他设备上。
明确一下,在我看来苹果应该选择一个不同的名称...
一个好的名字可以是“CGCalculationSpace(计算空间)”。
事实上,这个名称中包含单词“layer(图层)”,让人想起了NSLayers。
重申一遍:CGLayers与图层完全没有任何关系。它们没有任何形式的联系。名称中使用字母“l a y e r”的方式真的很令人困惑 - 真是可惜!
CGLayers可能应该被称为“workspaces(工作区)”或“calculation paradigms(计算范式)”或类似的名称。