我很困惑CGLayer
和CALayer
。它们看起来很相似,那么为什么会有单独的实现呢?和 和 之间有什么区别和CGLayer
兼容性CALayer
?
1 回答
它们完全不同,不兼容。
绝对清楚:
两个名称中都使用了“层”一词,这完全是巧合;它们完全不相关。
CGLayers 是一个“特殊”“高性能”的东西。
您可以将它们视为“像位图,但更好”。
苹果坐下来说:“我们厌倦了使用位图的人,让我们做点更好的吧!” :-)
事实上,你只使用 CGLayers offscreen。
重复一遍,CGLayers 完全在屏幕外使用。
一旦它们准备就绪,您就可以将它们投射到您的实际屏幕上(也就是说:将它们投射到您的一个视图上)。
(但是:请注意:CGLayer 经常“单独”使用。当我说它们“单独”使用时,我的意思是它们用于:图像处理或数学计算。在这种情况下,CGLayer 永远不会出现在屏幕上,它们有与屏幕世界完全没有联系。)
相比之下...... CALayers 只是“在”视图中的东西。CALayers 就是视图的工作方式。
所以这两个概念是完全不同的。
CALayers 只是“在”视图中的东西。 相比之下,CGLayers 是苹果酷炫的“离屏、高性能、计算机器”。
需要明确的是,CGLayers 与视图完全没有联系,也与视图没有关联。(当然,您可以将 CGLayer 粘贴到视图中,但随后,您可以将“排版”或“图像”粘贴到视图中。排版和图像不是视图,而 CGLayer 也不是视图。)
典型的例子是这样的:
你想把复杂的东西画一次,然后在屏幕上画很多次。这个问题的答案正是 CGLayers。您的“工作区”将是 CGLayer;然后,您可以将其粘贴到打印机、屏幕或其他任何地方。
需要明确的是,在我看来,苹果应该选择一个不同的名字......
a good name would be "CGCalculationSpace."
The fact that the name contains the word "layer," makes you think of NSLayers.
To repeat: there is absolutely no relationship, whatsoever, in any way. CGLayers are not even vaguely related to layers.
There is no connection, at all. It is really confusing that the letters "l a y e r" are used in the name - it's a shame!!
CGLayers should be called perhaps "workspaces" or "calculation paradigms" or something like that.