4

我为 Leopard 构建了一个使用核心动画的屏幕保护程序。它不会做任何过于复杂的事情;使用 CALayers 和 CATextLayers 树生成以下结构的数据“表”:

- root
  › maincontainer
    › subcontainer
      › row [multiple]
        › cell [multiple]
          › text layer

任何时候屏幕上最多渲染 50 个 CALayer。

一旦我建立了“表”,我将使用 CABasicAnimation 添加动画“子容器”到视图中。同样,我没有做任何花哨的事情——只是一个简单的淡入。

问题是,虽然动画确实发生了,但观看起来很痛苦。在我的开发机器上,它是一个 3.06Ghz iMac,具有 4GB 的 RAM,并且似乎将动画分成 10 个步骤而不是显示渐变。

在屏幕保护程序的目标 ppc mac-mini 上情况变得更糟;它甚至拒绝播放动画,通常从动画开始(0%不透明度)到中途(50%)然后完成“补间”。

我对 ObjectiveC 比较陌生,我的经验是基于使用垃圾收集环境,但我不敢相信我在屏幕保护程序开始导致此类问题时泄漏了足够的内存。

另外,我很确定这不是硬件问题。我已经测试了使用核心动画的内置屏幕保护程序,并下载了一些免费的基于 CA 进行比较,它们在两台机器上都可以正常运行。

关于在屏幕保护程序中使用 CA 或在一般情况下使用 CA 的信息在 Google 上非常少,而且关于配置/麻烦屏幕保护程序的建议/教程似乎不存在。因此,社区可以提供的任何帮助都将受到欢迎!

- - 更新 - -

似乎隐式动画有助于使事情变得更平滑。仍然有点生涩,但没有像我的解决方案那样尝试使用显式动画为所有内容设置动画那么糟糕。

4

1 回答 1

1

屏幕保护程序没有什么特别之处。我假设您已经从核心动画编程指南开始?通过 Instruments 运行它会给你很多关于你在哪里花费太多时间的信息。

您用来进行淡入的代码会很有用。对于您所描述的,您甚至不需要 CABasicAnimation;你可以只设置图层的动画属性,默认情况下它们是动画的。确保你已经阅读了Implicit Animations。该页面的其余部分可能也有用。

你在 CoreAnimation 中的大部分工作都是不碍事的。我一般都知道它在做什么,而大多数问题来自第二次猜测它试图告诉它太多。

于 2009-06-18T23:43:45.187 回答