这两个功能目前是我的瓶颈。我正在使用非常大的位图。
我如何改善他们的表现?
答案 0 :(得分:2)
你可以在第一次绘制之前缓存你创建的较小版本的位图,然后简单地绘制缩小的样本而不是完整的15万像素的东西。
然后再次确保你只绘制了必要的内容,即在'drawRect:(NSRect)rect'中仅绘制rect(除非绝对必要)。并且尽量不要在该方法之外执行绘图。
答案 1 :(得分:1)
如果您正在绘制包含前景中移动内容的大型背景图片,请考虑使用图层支持的NSView
,添加图层并设置其背景图像。然后,您可以在背景图层上方的其他图层(或图层支持的NSViews
)中绘制内容,并且视图将永远不需要重绘背景图像,因为它存储在GPU的纹理内存中。您的当前图片对于单个CALayer
来说太大了(CALayer
s仅限于最大OpenGL纹理大小2048 x 2048),因此您可能需要将其分解为切片。
否则,正如@iolo所提到的那样,你应该确保只重绘了真正需要更新的视图部分。