为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

翻翻过去那场雪 2019-12-06 12:45:05

当前面临崩溃问题时,如何在不消耗大量内存(或有效地)的情况下在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或Core Animation),如果有人可以提出示例代码,则可以这样做。


查看完整描述

2 回答

?
ibeautiful

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

就您而言,您将获得的优势是:

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

  2. 对图像使用PVR格式(与PNG相比);PVR是iPhone / iPad图形芯片的本机格式,它将节省更多内存。

  3. 您也可以尝试为图像使用较小的覆盖区格式(即RGB565代替RGB8888,每像素16位而不是32位)。

如果您认为这对您有用,请参阅本教程。

您可以直接使用Open GL或Core Animation进行相同的操作,但是我认为最好让Cocos2d处理低级的东西。

有关基于Core Animation的相同操作的教程,请参阅此文章。如您所见,您将实现一些类来完成Cocos2d已经为您提供的服务(以及许多其他功能)。


查看完整回答
反对 回复 2019-12-06
?
元芳怎么了

上面的mysterycoconut链接很好,因为它避免了当人们在SO上问有关CoreGraphics动画的问题时似乎总是出现的“ use Cocos2D”反射帖子。您遇到的问题的根源是一个经过深思熟虑的animationImages API,该API消耗了过多的应用程序内存,因此永远不应使用。您可以在iOS设备上的“视频和内存使用情况”中阅读问题的详细说明。。在那里描述了我自己的解决方案。基本上,您想将图像数据解压缩到一个文件中,然后将内容渗入显卡。在iOS下,这非常快,CoreGraphics在图形卡级别利用优化的纹理逻辑来限制缓冲区副本,从而很少使用设备CPU。通过这种方法,可以仅使用CoreGraphics即可获得数百幅图像的非常快的动画(45至60 FPS),而不会耗尽所有应用程序的内存。


查看完整回答
反对 回复 2019-12-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信