我有些困惑,什么情况下应该在 iPhone 或 Mac 上使用 CALayer,什么情况下不需要使用它?在我的基于 UIView 的对象上,CoreAnimation可以很好地工作,而无需使用 CALayer。什么时候适合深入研究这个类呢?
在我的基准测试中,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具有非常不同的接口。
如果您可以使用“隐式动画”(即由UIKit / AppKit提供而无需深入研究CA、图层和动画器),那么一定要选择这条路线。当您开始使用更复杂的动画,例如非线性运动或重复效果以及某些同步效果时,CoreAnimation就会发挥作用。您可以做很多事情,但它是一个相当重型的工具(至少与UIKit相比,学习曲线相应较陡峭)。