iphone动画帧速率和帧数

时间:2009-05-11 01:36:44

标签: iphone animation

我正在开发一个客户想要为大图像制作动画的应用程序(305x332)。客户希望在1.75秒内使用50帧来循环动画。通过这么多处理,我发现应用程序非常慢。启动缓慢,响应触摸并关闭。在它自己的iPhone上,该应用程序将经常崩溃或锁定手机。请参阅下面的代码。我的问题:

  1. 我是在做一些导致性能不佳的事情,还是50帧不能问?
  2. 动画中的帧数和动画速度是否有最佳实践?
  3. 动画中的图像大小是否有最佳做法?
  4. 请告诉我。这是代码......

    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];   
    

3 个答案:

答案 0 :(得分:5)

我前一段时间做了一些测试。在UIImageview动画放弃和borked之前,管理最大约40帧左右的20K PNG。

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

我参与的一个项目使用这种技术来显示数百个没有问题的大图像。

一些提示:

  • 尽可能多地使用CALayers。

  • 显示每个帧时不要进行任何缩放。尝试将每个源图像设置为您想要显示的确切大小。

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

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

  • 声音同步变得有点冒险。您必须以自己的方式指定何时开始/停止声音。如果你有声音并且需要精确(比如嘴唇同步)那么视频路线可能更实用。

祝你好运。

答案 1 :(得分:4)

我认为这对iPhone有点太过分了。根据我的fag包解压缩你的图像大约需要21Mb。这可能会导致您的应用仅通过内存使用在手机上终止。将那么多数据转移到帧缓冲区也会导致手机问题。

我认为你需要使用更合适的动画技术。 305 * 322的~30fps听起来像是视频给我。视频的压缩方式使您无需一次将所有解压缩的帧保存在内存中。遗憾的是,如果你想显示视频而不是将整个屏幕放到内置控制中,你将不得不建立自己的播放器--VLC已经移植到iPhone上,所以可以作为一个很好的起点。

答案 2 :(得分:0)

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