【问题标题】:iPhone Best practices for large number of animations using UIImageViewiPhone 使用 UIImageView 处理大量动画的最佳实践
【发布时间】:2010-12-21 04:13:21
【问题描述】:

只是请求一些关于在 iphone 上动画图像的建议。我正在构建一个由具有 5 个动画的角色组成的应用程序。

每个动画由大约 50 张图像组成,平均持续时间为 3 秒。

我打算为每个动画创建一个图像数组,将它们作为 UIImageView 的源并根据需要切换它们。但正如你可以猜到的那样,这种方法会杀死我 iphone 的内存,从而杀死应用程序。 (250 张图片,每张 130K!)

所以这让我想知道其他人是如何解决这个问题的?也许把动画改成电影?

感谢您的建议。

【问题讨论】:

    标签: iphone animation uiimageview


    【解决方案1】:

    如果你能逃脱它,我会推荐电影路线。它会更干净,并且可能会更高效。

    但是,如果您因某种原因无法使用图像,以下是连续加载 5000 张全帧图像的性能:

    [UIImage imageWithData:...] // 44.8 seconds
    
    [UIImage imageWithContentsOfFile:...] // 52.3 seconds
    
    [[UIImage alloc] initWithContentsOfFile:…] // 351.8 seconds
    
    [UIImage imageNamed:...] // hung due to caching
    

    【讨论】:

    • 感谢乔希的详细回答!看起来 [uiimage imageWithData:] 可能是赢家,尽管我也想看看下面 Hivebrain 建议的 cocos2d spriteAtlas。
    【解决方案2】:

    您是否尝试过在 UIImageView 上设置 animationImages 属性,并使用一组 UIImages 表示您的帧。我过去做过,效果很好,但我的动画中没有你那么多的图像。

    如果图像中的数据过多,您可能需要做一些更复杂的事情,例如精灵图集。该方法将一堆帧组合为一个图像,然后通过更改大图像的可见部分来为这些帧设置动画。这样一来,整个东西立即加载,动画只是改变了用户看到的图像部分。 Cocos2D 有很多关于 sprite 动画的功能。如果 animationImages 不起作用,您可能想尝试一下。

    --麦克

    【讨论】:

    • 嘿 Hivebrain,是的,我正在使用带有 [UIImage imageNamed:] 的 animationImages 属性。这导致我的应用程序崩溃:(我将查看 cocos2d 并查看 spriteAtlas 是否优于使用带有 [UIImage imageWithData] 的动画图像,如上面 Josh 所建议的那样。
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多