我有两种修改屏幕显示的方法。有没有办法冻结屏幕,直到第二个方法被调用?
// I want to freeze the screen here
updateDisplay1(); // Change in display doesn't take effect until screen is unfrozen
updateDisplay2();
// Unfreeze screen here
在Excel VBA中,这将类似于screenUpdating = FALSE。 Cocoa中有类似的功能吗?
一种可能的方法是截取屏幕截图:
// Take screenshot of the screen
// Display the screenshot image in front of the screen
updateDisplay1(); // Change is not visible
updateDisplay2();
// Remove screenshot image
但我担心这很慢并占用大量内存。有更有效的方法吗?
答案 0 :(得分:0)
你在说什么屏幕?
标准Cocoa行为是:
setNeedsDisplayInRect
。作为这些调用的结果,将在运行循环上安排重绘; drawRect
调用。因此,您为响应某个操作而进行的所有视图更改都是自动原子的。您必须以自己的方式进行创建部分更新。
答案 1 :(得分:0)
使用CGWindowListCreateImage截取屏幕截图需要几毫秒并且大致使用任何内存。它通常直接在图形卡中完成。
在做任何表现假设之前尝试并测量: - )