假设我想在UIView中显示一个坐标图,它将及时更新。假设我正在实现UIView的-drawrect
和其他方法来更新图形。
由于图中的坐标系随着时间的推移保持不变,因此有两个UIViews更有效,其中一个(view1)从图像文件加载坐标系作为其视图,因此无需绘制框架每次图表更新和另一个(view2)实现-drawrect
实现并添加为view1的子视图时,只有一个UIView,其中整个图形在-drawrect
中绘制?
以上只是一个具体的例子。我想知道的是,如果它是一个设计模式,尽可能地将静态UI元素与动态UI元素分开,只要涉及-drawrect
,并且如果它确实大大节省了CPU(或GPU)资源。
任何见解都将受到赞赏。感谢。
答案 0 :(得分:0)
我的经验是,通常最好在您绘制的地方使用屏幕外缓冲区,然后将部分或全部屏幕外缓冲区复制到屏幕上。您可以通过多种方式执行此操作,具体取决于您使用的视图类型。例如,如果您有NSOpenGLView,则可以绘制到纹理支持的FBO,然后使用该纹理在屏幕上绘制纹理四边形。如果您正在使用CGImages作为静态部分,您可以在主内存中绘制到CGBitmapContext,然后将该位图上下文转换为CGImage以绘制到视图。
如何绘制到屏幕外缓冲区也取决于您绘制的内容。对于类似图形的东西,您可以将背景绘制到屏幕外缓冲区,然后将点添加到随时间推移而绘制的曲线上,然后只需复制屏幕所需的部分。对于类似于场景中所有角色和物体都在移动的游戏,您可能需要在每个帧上绘制场景中的所有内容。