【发布时间】:2011-06-08 21:11:00
【问题描述】:
假设我想将 50 张图像添加到视图中,以便为它们设置动画。假设我打算使用 Core Animation(例如 CABasicAnimation)而不是“UIView”动画。
我最好通过添加 50 个子视图或 50 个子层来实现这一点?有区别吗?
谢谢。
【问题讨论】:
标签: ios uiview core-animation calayer caanimation
假设我想将 50 张图像添加到视图中,以便为它们设置动画。假设我打算使用 Core Animation(例如 CABasicAnimation)而不是“UIView”动画。
我最好通过添加 50 个子视图或 50 个子层来实现这一点?有区别吗?
谢谢。
【问题讨论】:
标签: ios uiview core-animation calayer caanimation
正如我所描述的here,我在动画中同时使用了 UIView 和 CALayers,发现它们之间的性能差异可以忽略不计。 UIViews 是围绕层的非常轻量级的包装器。此外,您需要的任何基于层的动画都可以轻松应用于 UIView 的支持层。
在我想创建跨平台(Mac / iOS)UI 元素的情况下,我直接使用了 CALayers,因为 CALayers 在两个平台上的实现几乎相同(与明显不同的 NSView 和 UIView 不同)。 CALayers 没有任何开箱即用的触摸处理例程,但您可以根据需要添加该功能。
还有一些边缘情况,您可能希望直接使用图层,例如尝试对图层进行有限的 3-D 操作(如在 CoverFlow 效果中)或使用 CAReplicatorLayer 产生粒子效果时。
【讨论】:
+setCompletionBlock: 使用 CAAnimations 获得类似的块完成回调,这将在完成包含在该事务中的所有动画时执行一个块。如果您想走那条路,请考虑一下。
UIView 包含子层,因此它们的重量更重,并且包含您可能不需要的所有 50 个图像的东西,例如事件和触摸处理程序/变量。因此,与为每个图像使用视图相比,使用层可能会更有效,并且使用更少的内存。
【讨论】:
如此少量的图像的差异可以忽略不计。使用最方便的。
【讨论】:
我还没有做过动画(还 :-),但我记得读过的关于它的内容建议创建一个图像,其中所有 50 个平铺在其上,然后在绘图时偏移到正确的图像。这样你只需要一层或 UIImage 或其他任何东西来显示它。我不知道速度,但我猜它会节省内存并且可能更容易管理和编码。
【讨论】: