何时在Mac/iPhone上使用CALayer?

25

我有些困惑,什么情况下应该在 iPhone 或 Mac 上使用 CALayer,什么情况下不需要使用它?在我的基于 UIView 的对象上,CoreAnimation可以很好地工作,而无需使用 CALayer。什么时候适合深入研究这个类呢?

2个回答

40
在我的基准测试中,UIView和CALayer在iPhone上提供大致相同的性能水平。正如rpetrich在评论中提到的那样,UIView是CALayer的薄包装器。在Mac上,CALayer比NSView更轻量级。
正如Ben所指出的那样,通过直接使用CALayer甚至可以提供一些3D效果,超越了隐式动画的能力。在许多情况下,即使使用标准视图,也可以通过访问后备层(如果视图支持层)来实现这一点。
另一个问题是跨平台(Mac / iPhone)代码。我的iPhone应用程序在其主要视图中使用全CALayer界面,这在很大程度上是因为我可以在Mac版本中使用完全相同的代码来绘制该界面。作为另一个例子,我向您介绍Core Plot框架,它完全使用CALayer绘制图形,并可在Mac和iPhone上工作。 CALayer在两个平台上几乎相同,而UIView和NSView具有非常不同的接口。

5
如果您可以使用“隐式动画”(即由UIKit / AppKit提供而无需深入研究CA、图层和动画器),那么一定要选择这条路线。
当您开始使用更复杂的动画,例如非线性运动或重复效果以及某些同步效果时,CoreAnimation就会发挥作用。您可以做很多事情,但它是一个相当重型的工具(至少与UIKit相比,学习曲线相应较陡峭)。

3
我认为这个声明是误导性的。Core Animation提供的抽象级别非常高。它的API非常易于上手和使用。我明白你在将其与UIKit进行比较,但称其为“重型”并使用“学习曲线”的词汇是令人沮丧的,我认为这是误导性的。不过,毫无疑问,Core Animation编程指南需要一些改进。 - Joe Ricioppo
3
我同意Joe的观点:UIView只是对CALayer和UIResponder的轻量级封装。如果没有Interface Builder,与UIView相比,CALayer并不会更难处理(对于任何在OpenGL上开发的人来说,两者都被大大简化了)。 - rpetrich
2
好的,也许我在描述中有点苛刻:CoreAnimation确实很棒,一旦你掌握了它,就很容易上手。然而,它比简单地在begin/commit动画调用中包装一个setFrame:消息要多出一个数量级的工作量。 - Ben Gottlieb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接