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

如何在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 animationimgView.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

TA贡献1993条经验 获得超5个赞

我的建议是使用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
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-12-06
  • 2 回答
  • 0 关注
  • 651 浏览

添加回答

举报

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