iPhone动画帧速率和帧数

标签 iphone animation

我正在开发一个应用程序,客户想要为大图像 (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];   

最佳答案

我不久前进行了一些测试。在 UIImageview 动画放弃并停止之前,设法最大程度地处理约 20K PNG 的约 40 帧。

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

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

一些提示:

  • 尽可能多地使用 CALayers。

  • 显示每一帧时不要进行任何缩放。尝试使每个源图像达到您想要显示的精确尺寸。

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

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

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

祝你好运。

关于iPhone动画帧速率和帧数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/846458/

相关文章:

iphone - 在 USplitView iOS 5.1 中加载和隐藏主视图

iphone - Facebook iPhone 应用程序-启动图标效果

iphone - 许多 NSDictionary 的 NSArray。为给定键找到具有必要值的 NSDictionary 的最佳方法是什么?

Android - AnimatorSet、Object Animator - 弹跳动画链正在合并?

重复播放时 iOS 动画不会重置

iphone - 用 Shark 分析 iphone : Nothing happens after pressing start

ios - iOS UIView Transition subview 放错了片刻

javascript - 如何使用 jQuery 在淡出元素之前暂停?

表格行动画的Android过渡动画

CSS 动画 - 颜色改变后改变背景图像