Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Graphics 在-drawrect中绘制图像或从文件中加载相同的图像,哪个更有效?_Graphics_Uiview_Drawrect - Fatal编程技术网

Graphics 在-drawrect中绘制图像或从文件中加载相同的图像,哪个更有效?

Graphics 在-drawrect中绘制图像或从文件中加载相同的图像,哪个更有效?,graphics,uiview,drawrect,Graphics,Uiview,Drawrect,假设我想在UIView中显示一个坐标图,它将被及时更新。假设我正在实现UIView的-drawrect和其他方法来更新图形 由于图形中的坐标框在一段时间内保持不变,使用两个UIView(其中一个(视图1)从图像文件中加载坐标框作为其视图,从而无需在图形每次更新时绘制坐标框,另一个(视图2)是否更有效实现了-drawrect并将其添加为view1的子视图,而不是只有一个ui视图,其中整个图形在-drawrect中绘制 以上只是一个具体的例子。我想知道的是,如果涉及到-drawrect,那么尽可能多

假设我想在UIView中显示一个坐标图,它将被及时更新。假设我正在实现UIView的
-drawrect
和其他方法来更新图形

由于图形中的坐标框在一段时间内保持不变,使用两个UIView(其中一个(视图1)从图像文件中加载坐标框作为其视图,从而无需在图形每次更新时绘制坐标框,另一个(视图2)是否更有效实现了
-drawrect
并将其添加为view1的子视图,而不是只有一个ui视图,其中整个图形在
-drawrect
中绘制

以上只是一个具体的例子。我想知道的是,如果涉及到
-drawrect
,那么尽可能多地将静态UI元素从动态UI元素中分离出来,这是否是一种设计模式,并且这样做是否会大大节省CPU(或GPU)资源


如有任何见解,将不胜感激。谢谢。

我的经验是,通常最好在绘图的位置设置一个屏幕外缓冲区,然后将部分或全部屏幕外缓冲区复制到屏幕上。有很多方法可以做到这一点,这取决于您使用的视图类型。例如,如果有,可以绘制到纹理支持的FBO,然后使用该纹理将纹理四边形绘制到屏幕。如果正在为静态部件使用CGImages,则可以在主内存中绘制CGBitmapContext,然后将该位图上下文转换为CGImage以绘制到视图


如何绘制到屏幕外缓冲区还取决于所绘制的内容。对于图形之类的东西,您可以将背景绘制一次到屏幕外缓冲区,然后随着时间的推移将点添加到正在绘制的曲线上,然后只复制需要进行屏幕显示的部分。对于场景中所有角色和对象都在移动的游戏,您可能需要在每一帧上绘制场景中的所有内容。

谢谢您的回复。嗯,我在编程方面是个新手,尤其是在图形方面。我知道缓冲区是什么,但不知道“屏幕外缓冲区”,纹理支持的FBO。从你的回答中我模糊地了解到,这证实了我的想法,即我应该尽可能少地绘制静态图形内容(当然不适用于静态内容很少的游戏),并将这些内容从内存复制到屏幕上。因此,鼓励在代码中分离动态和静态内容。我对你的理解正确吗?我想说的是,在很多情况下,这可能是一个成功的策略,但你需要根据你的具体需求调整你的方法。听起来在这种情况下,你会赢。