何时在Mac/iPhone上使用CALayer?

ran*_*its 22 iphone cocoa cocoa-touch core-animation objective-c

我有点困惑何时在iPhone或Mac上使用CALayer以及何时不使用它?CoreAnimation可以在我的基于UIView的对象上正常工作,而无需使用CALayer.何时适合挖掘这门课程?

Bra*_*son 36

在我的基准测试中,UIView和CALayer在iPhone上提供了相同水平的性能.正如rpetrich在他的评论中提到的那样,UIViews是一个围绕CALayers的薄包装.在Mac上,CALayers比NSView轻得多.

正如Ben指出的那样,你可以通过直接使用CALayers来超越隐式动画的功能,甚至可以通过CATransform3D提供一些3D效果.在许多情况下,即使使用标准视图,您也可以通过访问支持层(如果视图是图层支持的)来执行此操作.

另一个问题是跨平台(Mac/iPhone)代码. 我的iPhone应用程序在很大程度上使用全CALayer接口作为其主视图,因为我可以使用完全相同的代码在其Mac对应物中绘制该接口.再举一个这样的例子,我将你引导到Core Plot框架,它完全使用CALayers绘制图形,并且可以在Mac和iPhone上运行.两个平台上的CALayers几乎相同,其中UIView和NSView具有非常不同的接口.


Ben*_*ieb 5

如果你可以用“隐式动画”(由 UIKit/AppKit 提供,无需深入研究 CA、图层和动画师)做你想做的事情,那么一定要走这条路。

当您开始使用更复杂的动画(例如非线性运动或重复效果以及某些同步效果)时,CoreAnimation 就会发挥作用。你可以用它做很多事情,但它是一个相当重型的工具(具有相称的学习曲线,至少与 UIKit 的东西相比)。

  • 我认为这种说法具有误导性。Core Animation 提供的抽象级别非常出色。该 API 非常容易上手和使用。我知道您将其与 UIKit 进行比较,但称其为“重任”并使用“学习治愈”一词令人沮丧,而且我认为具有误导性。当然,《核心动画编程指南》还需要做一些工作。 (3认同)
  • 我同意乔的观点;UIViews 只是 CALayer 和 UIResponder 之上的一个薄包装。如果没有 Interface Builder,CALayers 不会比 UIView 更难使用(对于任何在 OpenGL 上进行开发的人来说,两者都大大简化了) (3认同)
  • 好吧,也许我的描述有点苛刻:CoreAnimation 非常棒,一旦你掌握了它的窍门就很容易。然而,这比简单地在开始/提交动画调用中包装 setFrame: 消息要多一个数量级的工作。 (2认同)