Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用CGContextDrawImage进行冗余图像绘制_Iphone_Objective C_Cgcontext - Fatal编程技术网

Iphone 使用CGContextDrawImage进行冗余图像绘制

Iphone 使用CGContextDrawImage进行冗余图像绘制,iphone,objective-c,cgcontext,Iphone,Objective C,Cgcontext,我有一张图片,我希望在屏幕上反复重画,但是,每秒有大量的重画,每次都画这个图片会使应用程序的性能受到巨大的影响。有没有办法缓存CGImageRef或其他可以使CGContextDrawImage执行得更快的东西?尝试使用UIImageView,看看它是否足够快。您可以拥有多个UIImageView。您应该将它们的所有图像属性设置为UIImage的同一实例 如果是为了一个游戏,你应该只使用一个游戏引擎(Unity、Cocos2D等)。他们已经花了很多时间研究如何快速制作这些东西。CGLayerRe

我有一张图片,我希望在屏幕上反复重画,但是,每秒有大量的重画,每次都画这个图片会使应用程序的性能受到巨大的影响。有没有办法缓存CGImageRef或其他可以使CGContextDrawImage执行得更快的东西?

尝试使用UIImageView,看看它是否足够快。您可以拥有多个UIImageView。您应该将它们的所有图像属性设置为UIImage的同一实例


如果是为了一个游戏,你应该只使用一个游戏引擎(Unity、Cocos2D等)。他们已经花了很多时间研究如何快速制作这些东西。

CGLayerRef应该是您所需要的

从苹果文档:

图层适用于以下各项:

计划重用的图形的高质量屏幕外渲染

  • 例如,您可能正在构建场景并计划重用相同的背景。将背景场景绘制到图层,然后在需要时绘制图层。另外一个好处是,在绘制图层时,不需要知道颜色空间或设备相关信息
  • 重复画。例如,您可能希望创建一个模式,该模式由反复绘制的相同项目组成。将项目绘制到图层,然后重复绘制图层,如图12-1所示。如果将任何重复绘制的石英对象(包括CGPath、CGShading和CGPDFPage对象)绘制到CGLayer,则其性能将得到改善。请注意,图层不仅仅用于屏幕绘图;您可以将其用于不面向屏幕的图形上下文,例如PDF图形上下文

为什么不将图像设为UIImageView?它是一个图像,但在屏幕上的多个位置绘制。所以会有很多的视图。此外,内容是动态的,因此这些图像的绘制位置会发生变化,因此我认为使用图像视图不是正确的方法。使用Box2d或类似的库,并使用sprite。这是一个游戏,内容相当动态,因此我不想处理添加、移动、,如果可以避免的话,请删除所有子视图。您是否尝试过并看到了?或者你只是在猜测?顺便说一句,你没有理由不能缓存UIImageView并重用它们,就像UITableView对UITableViewCells所做的那样。