iPhone SDK:带有“animationImages”问题的长动画

时间:2009-06-17 19:11:54

标签: iphone xcode animation

我一直在尝试在xcode中设置动画很长一段时间,起初我开始尝试动画100个1000x1000 png,但这些图像对于iphone来说太大了,现在我试图动画100个320x480 pngs它似乎动画精细到大约40帧,然后应用程序崩溃,所以,有没有其他方法的动画不会这样做?这可能只是因为这个代码加载了太多的图像供iPhone处理,是否有其他方法可以用来让应用程序停止崩溃?或者我可以优化它 代码进一步? (顺便说一句,我是iphone平台的新手,所以在回答时请记住)

- (IBAction)startClick1:(id)sender{

spud123.animationImages = [NSArray arrayWithObjects:
                          [UIImage imageNamed: @"spud1230000.png"],
                          [UIImage imageNamed: @"spud1230001.png"],
                          [UIImage imageNamed: @"spud1230002.png"],
                          [UIImage imageNamed: @"spud1230003.png"],
                          [UIImage imageNamed: @"spud1230004.png"],
                          [UIImage imageNamed: @"spud1230005.png"],
                          [UIImage imageNamed: @"spud1230006.png"],
                          [UIImage imageNamed: @"spud1230007.png"],
                          [UIImage imageNamed: @"spud1230008.png"],
                          [UIImage imageNamed: @"spud1230009.png"],
                          [UIImage imageNamed: @"spud1230010.png"],
                          [UIImage imageNamed: @"spud1230011.png"],
                          [UIImage imageNamed: @"spud1230012.png"],
                          [UIImage imageNamed: @"spud1230013.png"],
                          [UIImage imageNamed: @"spud1230014.png"],
                          [UIImage imageNamed: @"spud1230015.png"],
                          [UIImage imageNamed: @"spud1230016.png"],
                          [UIImage imageNamed: @"spud1230017.png"],
                          [UIImage imageNamed: @"spud1230018.png"],
                          [UIImage imageNamed: @"spud1230019.png"],
                          [UIImage imageNamed: @"spud1230020.png"],
                          [UIImage imageNamed: @"spud1230021.png"],
                          [UIImage imageNamed: @"spud1230022.png"],
                          [UIImage imageNamed: @"spud1230023.png"],
                          [UIImage imageNamed: @"spud1230024.png"],
                          [UIImage imageNamed: @"spud1230025.png"],
                          [UIImage imageNamed: @"spud1230026.png"],
                          [UIImage imageNamed: @"spud1230027.png"],
                          [UIImage imageNamed: @"spud1230028.png"],
                          [UIImage imageNamed: @"spud1230029.png"],
                          [UIImage imageNamed: @"spud1230030.png"],
                          [UIImage imageNamed: @"spud1230031.png"],
                          [UIImage imageNamed: @"spud1230032.png"],
                          [UIImage imageNamed: @"spud1230033.png"],
                          [UIImage imageNamed: @"spud1230034.png"],
                          [UIImage imageNamed: @"spud1230035.png"],
                          //and so on to 100
                          nil];

[spud123 setAnimationRepeatCount:1];
spud123.animationDuration =5.7;
[spud123 startAnimating];

}

Ps:我试过NSTimer,但我不能让它停止重复动画

3 个答案:

答案 0 :(得分:3)

这不是动画问题,而是一个设计问题。

首先,只需要一步,计算应用程序的内存要求: 解压缩时,每个PNG使用614400字节。因此,其中一百个使用61440000字节:超过60兆字节。这对手机来说有点期待。

如果您确实需要为每个帧显示不同的图像,则应该使用视频。视频有很多技术可以压缩图像,并在按顺序显示大量图像时降低处理和内存要求。

如果您需要这是一个具有更多控制权的动画,我建议您需要分析正在移动的内容并且仅对其进行动画处理 - 绘制单个背景,然后在其上设置较小的图像。

最后,如果这种方法不起作用,您将不得不learn OpenGL来获得所需的性能。

在不了解您的应用的情况下,很难提出建议。

答案 1 :(得分:2)

你需要仔细考虑你的应用程序内存使用,但只是让你知道选项,我已成功使用基于http://www.modejong.com/iPhone/PNGAnimatorDemo.zip的修改类,它可以在第一代iPad硬件上全屏处理15fps (1024x768)png动画。但请密切关注您的应用程序包大小。对于大多数应用程序来说,这绝对不是最佳选择。

答案 2 :(得分:0)

动画中的帧通常非常相似。因此,一个可能的解决方案是加载一些图像......然后使用OpenGL为它们设置动画。这适用于比如球弹跳。不确定你动画的是什么图像。