UIView动画与CALayers


75

我正在努力用CALayer概念化动画,而不是UIView自己的动画方法。将“ Core Animation ”放入其中,也许有人可以从较高的角度阐明这些概念,以便我可以更好地可视化正在发生的事情以及为什么要将UIView动画(我现在很熟悉)迁移到CALayer iPhone上的动画。Cocoa-Touch中的每个视图都会自动获取一个图层。而且,看来,您可以为一个和/或另一个做动画了?!?甚至将它们混合在一起?!?但为什么?线路在哪里?各自的优点/缺点是什么?

《 Core Animation编程指南》立即跳入了Layer&Timing类,我认为需要退后一步,了解为什么存在这些不同的部分以及它们之间如何相互联系。


3
这是一个很好的通用问题,所有答案都很出色。我在这个主题上投票赞成所有人。
mobibob 2010年

好问题。有谁知道为UIView的CALayer设置动画的最佳做法?在我的示例中,我需要3D效果,并且发现对图层进行动画处理会导致UIView的“框架”与图层未对齐(因此,对于按钮而言,水龙头将不再匹配)。
Marc 2012年

Answers:


55

使用视图进行控制,并使用图层来装饰眼睛。图层不接收事件,因此在这种情况下使用视图更为容易,但是当您要为子画面或背景等设置动画时,图层才有意义。事件通过图层直接传递到支持视图,因此您可以在不弄乱事件的情况下获得漂亮的视觉表示。尝试覆盖仅用于视觉表示的视图,并且您必须自己将点击事件传递给基础视图。


这是一个很好的答案。谢谢!
2014年

25

一个UIView总是被渲染到CALayer。当使用UIView方法为视图设置动画时,您正在有效地操纵基础CALayer

如果您需要做简单的事情,请使用这些UIView方法。对于更复杂的情况,或者如果您不希望图层与任何视图特别相关,请使用CALayers


21

在过去的一年中,我做了很多应用程序。这是我的经验法则:

  1. 使用UIView,直到它无法完成您想要的操作为止。
  2. 然后移至CoreAnimation。但是在您深入了解它之前...
  3. 如果您编写了多个动画,请使用Cocos2D。

Cocos2D做得更好吗?那么,您是否还有其他问题,涉及触摸事件处理以及openGL ES中遗漏的许多其他内容?
感谢

Cocos2D添加了许多便捷方法,因此代码更加紧凑。它们具有一些出色的内置效果。简而言之,如果您要进行大量动画处理,则使用Cocos2D编写的代码将少于OpenGL ES或Core Animation。他们有自己的触摸处理方法,所以这根本不是问题。
克里斯·加勒特

13
我的建议是除非使用游戏,否则不要使用Cocos2D。我认为这确实是最好的用例。不过,我同意,您应该尽可能长时间地使用UIView动画,并且除此以外的任何东西都应使用CoreAnimation。
乔纳森·斯特林

9

UIView变换仅是2D并受其限制,但是LAyer变换可以是3D,如果要进行3D处理,则应使用那些,如果您更改UIView变换或CALayer变换,则UIView动画将起作用。因此,从根本上讲,当您使用图层而不是视图时,可以进行更多操作。


2

我不确定我是否误解了克里斯对“ Cocos2D做得更好?您是否还有其他问题,涉及触摸事件处理以及openGL ES中缺少的其他问题?”的答复。

听起来答案似乎暗示Cocos2D实际上并非基于OpenGL ES框架。尽管它是一个出色的2D游戏引擎,但它确实在大部分渲染中都实现了OpenGL-附加到物理库中,它为动画提供了很多非常有趣的可能性-克里斯(Chris)是正确的-确实少了很多编码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.