【问题标题】:Faster Alternatives to UIImageView in iOSiOS 中 UIImageView 的更快替代方案
【发布时间】:2012-12-11 15:26:33
【问题描述】:

我有一个 png 图像列表,我希望它们一个接一个地显示以显示动画。在我的大多数情况下,我使用 UIImageView 和动画图像,它工作正常。但在某些情况下,我的 png 是 1280*768(全屏 iPad)动画,有 100 多帧。我看到在模拟器上使用 UIImageView 非常慢(第一次加载时间太长),我相信如果我把它放在设备上它会更慢。

是否有任何替代方法可以使图像序列的显示非常流畅?也许是核心动画?有什么可行的例子吗?

【问题讨论】:

    标签: ios ipad animation uiimageview core-animation


    【解决方案1】:

    核心动画可用于基于矢量/关键帧的动画 - 而不是图像序列。在 iPad 上加载超过一百个全屏 PNG 是一个真的坏主意,如果不直接终止,你几乎肯定会收到内存警告。

    您应该使用视频来显示此类动画。性能会好很多。您有什么理由不能在动画中使用 H.264 视频吗?

    【讨论】:

    • lxt 是正确的。如果您有超过 100 帧的全屏动画图像排序不是正确的方法。您应该寻找视频或将其拆分为实际的精灵并在代码中为其运动设置动画。
    • 我希望这些动画中的大多数都具有透明度通道。使用 H.264 的视频会允许透明吗?
    • 否 - 如果您需要 alpha,您可能需要找到一种替代方法(可能使用关键帧或路径为单个对象设置动画)。正如 Minthos 建议的那样,您可以尝试使用 OpenGL,但是对于超过一百个 1024 像素的纹理,这可能不是一个可行的解决方案。
    • @lxt 使用 pvrtc,纹理将保持压缩在 gpu 内存中,因此它实际上是可行的。它们每个像素需要 4 位,或者整个动画大约需要 50-100 MB。我在评论中发布的链接表明可以(但不容易)绘制透明视频。
    • 那种内存分配是真的在原来的 iPad 上推动的。这取决于您要定位的硬件。您当然可以使用色键视频,但如果您要进行复杂的 alpha 混合,则效果可能不是很理想。我并不是说它做不到,只是努力可能会超过成本。
    【解决方案2】:

    为您的照片制作视频。这是最简单也可能是最合理的方法。

    如果您想要真正好的性能和对动画的完全控制,您可以将图片转换为 pvrtc4 格式并使用 OpenGL 将它们绘制为广告牌(纹理精灵)。如果您不知道该怎么做,这可能是一项繁重的工作。

    【讨论】:

    • 视频是否支持透明的 Alpha 通道?就像现在一样,图像在某些地方具有透明度,以允许它们下面的其他组件可见和可触摸。视频会提供此功能吗?
    • 你可以试着理解这一点:stackoverflow.com/questions/1401517/…
    【解决方案3】:

    看第二个例子

    http://www.modejong.com/iPhone/

    摘自http://www.modejong.com/iPhone/

    还有 UIImageView.animationImages API,但是当使用超过几个大小合适的图像时,它会迅速占用所有系统内存。

    我想展示一个持续 2 秒、15 FPS 的全屏动画,总共有 30 张尺寸为 480x320 的 PNG 图像。这个例子实现了一个面向动画的视图控制器,它只是等待读取一帧的 PNG 图像数据,直到需要它。

    在第二代 iPhone 上,此类运行在大约 0.5MB 的内存中,CPU 利用率约为 5-10%,而不是分配许多兆字节。此示例也已更新,包括在显示动画时可选择通过 AVAudioPlayer 播放音频文件的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 2012-07-05
      • 2012-01-23
      • 2013-07-13
      • 2011-02-27
      • 2010-09-22
      • 2017-05-15
      相关资源
      最近更新 更多