【问题标题】:iphone animating frame rate and number of framesiphone动画帧率和帧数
【发布时间】:2009-05-11 01:36:43
【问题描述】:

我正在开发一个应用程序,客户想要为大图像 (305x332) 制作动画。客户希望在 1.75 秒内循环播放 50 帧动画。我发现应用程序在处理这么多时非常慢。启动、触摸响应和关机都很慢。在 iPhone 上,应用程序经常会崩溃或锁定手机。请参阅下面的代码。我的问题:

  1. 我是在做某事导致性能不佳,还是要求 50 帧太多?
  2. 是否有关于动画帧数和动画速度的最佳做法?
  3. 动画中的图像大小是否有最佳做法?

请告诉我。这是代码...

NSMutableArray *tempArray = [[NSMutableArray alloc] init];
for(int i = 1; i <= 50; i++)
{

    [tempArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%@-%d-%04d.JPG",[constitution getConstitutionWord], constitution.getAnimationEnum, i]]];  
}


backgroundImage.animationImages = tempArray;
[tempArray release];
backgroundImage.animationDuration = 1.75; // seconds 
backgroundImage.animationRepeatCount = 0; // 0 = loops forever 
[backgroundImage startAnimating];   

【问题讨论】:

    标签: iphone animation


    【解决方案1】:

    不久前我进行了一些测试。在 UIImageview 动画放弃和中断之前,设法将大约 20K PNG 的大约 40 帧最大化。

    如果您需要更多,您可以切换到使用视频或编写自己的动画渲染引擎。渲染引擎非常简单。它会在一个计时器上运行,该计时器从队列的头部获取已经加载的 UIImage,更新视图然后释放图像。一个单独的线程在队列的尾端预先加载几个帧。这样,在任何给定时间,您的内存中最多有 N 帧。您可以对其进行调整,以在计时器延迟和为您的应用预加载的帧数之间找到最佳平衡。

    我参与的一个项目使用该技术毫无问题地显示数百张大图像。

    一些提示:

    • 尽可能多地使用 CALayers。

    • 在显示每一帧时不要进行任何缩放。尝试使每个源图像都与您想要显示的大小完全相同。

    • 尽量不要用其他视图覆盖动画。它会减慢速度。

    • 您可以从捆绑包或通过扫描目录加载图像列表。 bundle 的缺点是不更新整个应用程序就无法更新图像。从目录加载的缺点是,在第一次启动时,您必须将图像从包中复制到可写位置,并且您的应用程序在运行时会变大。主要好处是您可以通过网络更新该目录中的媒体。

    • 声音同步变得有点冒险。您必须想出自己的方式来指定何时开始/停止声音。如果您有声音并且需要精确(如对口型),则使用视频路线可能更实用。

    祝你好运。

    【讨论】:

    • 感谢您提供详细信息。对此,我真的非常感激。我会试一试,让你知道它是怎么回事。也许我会有一些代码可以用我学到的东西发布。
    【解决方案2】:

    我认为这对 iPhone 的要求有点过分。根据我的 fag 数据包,解压缩后的图像占用大约 21Mb。这可能会导致您的应用程序仅通过内存使用而在手机上终止。将这么多数据转移到帧缓冲区中也会导致手机出现问题。

    我认为你需要使用更合适的动画技术。在 305*322 下约 30fps 对我来说听起来像是视频。视频以这样一种方式压缩,您不需要一次将所有解压缩的帧保存在内存中。遗憾的是,如果您想在不将整个屏幕交给内置控件的情况下显示视频,您将不得不构建自己的播放器 - VLC 已被移植到 iPhone,因此可以作为一个很好的起点。

    【讨论】:

      【解决方案3】:

      向我解释的方式,包括 iPhone OS 在内的 OS X 呈现它的视图的方式,图像将不断地相互堆叠。您可能想要尝试的是包含所有帧的大型精灵图像,一次裁剪为一个并根据需要捕捉到每个帧。这也减少了图像文件开销和渲染速度,就像 CSS 精灵在 Web 应用程序中所做的那样。这在我在 iPhone 上完成的 HTML5/CSS3 动画中效果很好,并且可能在您的背景图像动画中同样成功。

      【讨论】:

        猜你喜欢
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多