如何在iOS中高效地使用图像做animation

我如何做iOS的animation消耗大量内存(或有效),因为我目前面临崩溃的问题?

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

例如,在这里我已经显示了一个2个图像的示例animation。这是我现在做animation的代码。

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

任何人都可以在代码中提出任何改进,以便animation可以有效地完成,或者是否有任何其他的select,如openGL或核心animation,如果有的话,任何人都可以提供示例代码。

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

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

  1. 使用纹理地图集而不是单个图像来尽可能节省内存;

  2. 使用PVR格式为您的图像(与PNG); PVR是iPhone / iPadgraphics芯片的原生格式,可以节省更多的内存。

  3. 您也可以尝试使用较小的占位面积格式(即RGB565而不是RGB8888,每像素16位而不是32位)。

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

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

对于一个基于核心animation的教程做同样的,看看这个职位 。 正如你将会看到的那样,你将实现一些Cocos2d已经提供给你的东西(连同许多其他function)。

上面的mysterycoconut链接是个好主意,因为它避免了“使用Cocos2D”reflection文章,当人们问一个关于SO的CoreGraphicsanimation相关问题时总会出现这个文章。 您遇到的问题的根源是一个思路不清的animationImages API,它消耗了太多的应用程序内存,不应该被使用。 您可以在iOS设备的video和内存使用情况中阅读有关该问题的详细说明。 那里描述了我自己的解决scheme。 基本上,您想要将图像数据解压缩到文件,然后将内容粘贴到graphics卡中。 这在iOS下是​​非常快的,CoreGraphics在graphics卡层面使用优化的纹理逻辑来限制缓冲区拷贝,使得设备CPU使用非常less。 通过这种方法,可以获得数百张图像的非常快速的animation(45至60 FPS),而无需仅使用CoreGraphics来全部使用应用程序内存。