【问题标题】:When to use CALayer on the Mac/iPhone?何时在 Mac/iPhone 上使用 CALayer?
【发布时间】:2010-11-29 16:12:38
【问题描述】:

我有点困惑何时在 iPhone 或 Mac 上使用 CALayer,何时不使用? CoreAnimation 在我的基于 UIView 的对象上工作得很好,而无需使用 CALayer。什么时候适合深入学习这个课程?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch core-animation


    【解决方案1】:

    在我的基准测试中,UIView 和 CALayer 在 iPhone 上提供了大致相同水平的性能。正如 rpetrich 在他的评论中提到的,UIViews 是 CALayers 的一个薄包装。在 Mac 上,CALayers 比 NSViews 更轻量级。

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

    另一个问题是跨平台(Mac / iPhone)代码。 My iPhone application 在很大程度上使用全 CALayer 界面作为其主要视图,因为我可以使用完全相同的代码在其 Mac 对应界面中绘制该界面。再举一个例子,我把你引向Core Plot framework,它完全使用 CALayers 来绘制图表,并且可以在 Mac 和 iPhone 上运行。 CALayers 在这两个平台上几乎是一样的,UIView 和 NSView 有非常不同的界面。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我认为这种说法具有误导性。 Core Animation 提供的抽象级别非常出色。 API 非常容易上手和使用。我了解您将其与 UIKit 进行比较,但称其为“重任”并使用“学习治疗”一词令人沮丧,我认为具有误导性。当然,核心动画编程指南可能需要做一些工作。
      • 我同意乔的观点; UIViews 只是 CALayer 和 UIResponder 之上的一个薄包装器。如果没有 Interface Builder,CALayers 不会比 UIViews 更难使用(对于任何使用 OpenGL 开发的人来说,两者都大大简化了)
      • 好吧,也许我的描述有点苛刻:CoreAnimation 很棒,一旦你掌握了它就很容易。但是,这比简单地在开始/提交动画调用中包装 setFrame: 消息要多一个数量级。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2012-03-22
      • 1970-01-01
      • 2022-09-29
      • 2010-11-24
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多