【问题标题】:iOS: Should I Add UIViews or CALayers for animation?iOS:我应该为动画添加 UIViews 还是 CALayers?
【发布时间】:2011-06-08 21:11:00
【问题描述】:

假设我想将 50 张图像添加到视图中,以便为它们设置动画。假设我打算使用 Core Animation(例如 CABasicAnimation)而不是“UIView”动画。

我最好通过添加 50 个子视图或 50 个子层来实现这一点?有区别吗?

谢谢。

【问题讨论】:

    标签: ios uiview core-animation calayer caanimation


    【解决方案1】:

    正如我所描述的here,我在动画中同时使用了 UIView 和 CALayers,发现它们之间的性能差异可以忽略不计。 UIViews 是围绕层的非常轻量级的包装器。此外,您需要的任何基于层的动画都可以轻松应用于 UIView 的支持层。

    在我想创建跨平台(Mac / iOS)UI 元素的情况下,我直接使用了 CALayers,因为 CALayers 在两个平台上的实现几乎相同(与明显不同的 NSView 和 UIView 不同)。 CALayers 没有任何开箱即用的触摸处理例程,但您可以根据需要添加该功能。

    还有一些边缘情况,您可能希望直接使用图层,例如尝试对图层进行有限的 3-D 操作(如在 CoverFlow 效果中)或使用 CAReplicatorLayer 产生粒子效果时。

    【讨论】:

    • 我最终选择了 UIViews,主要是因为带有块的 UIView 动画在连续运行动画/采取行动很重要的情况下更容易实现。 (那些完成块非常干净,在我的特定情况下,使用委托 'animationDidStop' 调用将是一场噩梦。)
    • @Greg - 是的,新的基于块的 UIView 动画非常干净。但是,您可以使用 CATransaction 的+setCompletionBlock: 使用 CAAnimations 获得类似的块完成回调,这将在完成包含在该事务中的所有动画时执行一个块。如果您想走那条路,请考虑一下。
    【解决方案2】:

    UIView 包含子层,因此它们的重量更重,并且包含您可能不需要的所有 50 个图像的东西,例如事件和触摸处理程序/变量。因此,与为每个图像使用视图相比,使用层可能会更有效,并且使用更少的内存。

    【讨论】:

      【解决方案3】:

      如此少量的图像的差异可以忽略不计。使用最方便的。

      【讨论】:

      • 在我的实验中,我发现在我在 iPhone 4 上出现口吃之前,我可以制作大约 50 张图像。(我只能假设这个数字会根据图像的内容/大小而有很大差异,动画图像下方的半透明层数等)
      • 还有手机型号:D
      【解决方案4】:

      我还没有做过动画(还 :-),但我记得读过的关于它的内容建议创建一个图像,其中所有 50 个平铺在其上,然后在绘图时偏移到正确的图像。这样你只需要一层或 UIImage 或其他任何东西来显示它。我不知道速度,但我猜它会节省内存并且可能更容易管理和编码。

      【讨论】:

      • 这通常被称为“精灵”,适用于 OpenGL 动画,但并不真正适用于 CoreAnimation。
      猜你喜欢
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2015-05-11
      相关资源
      最近更新 更多