UIView 动画与 CALayers

Posted

技术标签:

【中文标题】UIView 动画与 CALayers【英文标题】:UIView animation vs CALayers 【发布时间】:2009-07-16 19:20:17 【问题描述】:

我正在努力用 CALayer 来概念化动画,而不是 UIView 的 自己的动画方法。把“Core Animation”扔进去,好吧,也许有人可以从高层次上阐明这些概念,这样我就可以更好地想象正在发生的事情以及我为什么要迁移 UIView 动画(我是现在比较熟悉)到 iPhone 上的 CALayer 动画。 Cocoa-Touch 中的每个视图都会自动获得一个图层。而且,您似乎可以为一个和/或另一个设置动画?!?甚至将它们混合在一起?!?但为什么?线路在哪里?各有什么优缺点?

核心动画编程指南立即跳转到图层和计时类,我认为需要退后一步,了解这些不同部分存在的原因以及它们之间的关系。

【问题讨论】:

这是一个很好的通用问题,所有答案都很好。我在这个帖子上投票给每个人。 好问题。有谁知道为 UIView 的 CALayer 设置动画的最佳实践?在我的示例中,我需要 3D 效果,并且我发现为图层设置动画会导致 UIView 的“框架”与图层未对齐(因此对于按钮,点击将不再匹配)。 【参考方案1】:

使用视图进行控制,使用图层来吸引眼球。图层不接收事件,因此在这些情况下使用视图更容易,但是当您想要为精灵或背景等设置动画时,图层是有意义的。事件直接通过层传递到后台视图,因此您可以获得漂亮的可视化表示,而不会弄乱您的事件。尝试覆盖您仅用于视觉表示的视图,您必须自己将点击事件传递到底层视图。

【讨论】:

这是一个很好的答案。谢谢!【参考方案2】:

UIView 始终呈现为 CALayer。当您使用UIView 方法为视图设置动画时,您实际上是在操纵底层CALayer

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

【讨论】:

【参考方案3】:

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

    使用 UIView 直到它不能满足您的需求。 然后转到 CoreAnimation。但在您深入了解之前... 如果你写的动画多于几个,请使用 Cocos2D。

【讨论】:

Cocos2D 在哪些方面做得更好?那么,关于触摸事件处理和 openGL ES 中遗漏的许多其他问题,您是否还有其他问题? Cocos2D 增加了很多方便的方法,所以代码更加紧凑。它们有一些很棒的内置效果。简而言之,如果你正在做一堆动画,如果你使用 Cocos2D,你将比 OpenGL ES 或 Core Animation 编写更少的代码。他们有自己的触摸处理方法,所以这根本不是问题。 我的建议是除非你在写游戏,否则不要使用 Cocos2D。我认为这确实是它最好的用例。不过,我同意您应该尽可能长时间地使用 UIView 动画,除此之外的任何内容都应使用 CoreAnimation。【参考方案4】:

UIView 变换只是 2D 并且仅限于此,但是 LAyer 变换可以是 3D,如果你想做 3D 的东西,你应该使用它们,如果你改变 UIView 变换或 CALayer 变换,UIView 动画将起作用。因此,在基本层面上,当您使用图层而不是视图时,您可以进行更多操作。

【讨论】:

【参考方案5】:

我不确定我是否误解了 Chris 对“Cocos2D 做得更好的地方是什么?那么关于触摸事件处理和 openGL ES 中遗漏的许多其他问题,您没有其他问题吗?”

听起来答案表明 Cocos2D 不是基于 OpenGL ES 框架,而实际上它实际上是基于 OpenGL ES 框架的。虽然它是一个出色的 2D 游戏引擎,但它确实为大部分渲染实现了 OpenGL - 附加到一个物理库,它为动画提供了许多非常有趣的可能性 - 克里斯是正确的 - 它确实少了很多编码。

【讨论】:

以上是关于UIView 动画与 CALayers的主要内容,如果未能解决你的问题,请参考以下文章

ios开发核心动画七:核心动画与UIView动画的区别

UIView 动画与 CALayers

iOS:UIView 动画与 CABasic/CAKeyframe 动画的性能

iOS开发UIView的动画与嵌入的UIButton的问题

UIView 动画过渡卷曲与透明背景

UIView与核心动画对比?