如何在iOS中高效地使用图像制作动画



我如何在iOS中做动画而不消耗大量内存(或有效),因为我目前面临崩溃问题?

对于单个动画,我有100个图像序列,每个图像约40kb;像这样,有大约7个动画,总共近700个图像。

例如,我在这里展示了一个2图像的示例动画。这是我现在做动画的代码。

/*First taking two images into an Array*/
NSArray *imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imageNamed:@"img2"],nil];  
/*Creating an image view as a layer for performing the animation */
imgView = [UIImageView alloc];
[imgView initWithFrame:CGRectMake(110,245,100,100)];
/*Setting the images for performing animations*/
imgView.animationImages = imageArray;
imgView.animationDuration = 8.5 ;//delay for performing the animation
imgView.animationRepeatCount = 1;
/* ..and finally adding the animation to the current view */
[self.view addSubview:imgView];
[imgView startAnimating];
[imgView release];
[imgView stopAnimating];
imageArray = nil;
[imageArray release];

谁能建议任何改进的代码,使动画可以有效地完成,或者有任何其他的选择,如openGL或核心动画,如果有,谁能建议一个示例代码来做。

我的建议是使用Cocos2d,这是一个基于Open GL的专门为游戏设计的框架。

在你的情况下,你将得到的好处是:

  1. 使用纹理图集代替单个图像以尽可能节省内存;

  2. 使用PVR格式为您的图像(相对于PNG);PVR是iPhone/iPad图形芯片的原生格式,它可以节省更多的内存;

  3. 你也可以尝试为你的图像使用更小的占用格式(即,RGB565而不是RGB8888, 16比特每像素而不是32)。

如果你认为这可以为你工作,看看这个教程。

你也可以直接使用Open GL或Core Animation来做同样的事情,但我认为让Cocos2d处理低级别的东西更好。

对于一个基于核心动画的教程做同样的,看看这篇文章。正如您将看到的,您将实现一些类来完成Cocos2d已经提供给您的事情(以及许多其他功能)。

上面的mysterycoconut链接是一个很好的链接,因为它避免了"使用Cocos2D"的反射贴,当人们询问CoreGraphics动画相关的SO问题时,这种反射贴似乎总是出现。你遇到的问题的根源是一个拙劣的animationImages API,它消耗了太多的应用程序内存,不应该使用。你可以在iOS设备上的视频和内存使用中阅读有关问题的详细描述。我自己对这个问题的解决方法在这里有描述。基本上,您希望将图像数据解压缩到一个文件,然后将内容blit到图形卡中。这在iOS下非常非常快,CoreGraphics在显卡级别使用优化的纹理逻辑,限制缓冲区副本,这样设备CPU的使用就很少。使用这种方法,可以获得数百张图像的非常快的动画(45到60 FPS),而无需使用CoreGraphics耗尽所有应用程序内存。

最新更新