7

我有一个每秒更新一次的 NSWindow 以显示当前时间。

这张图是处理器密集型的,我想避免在窗口完全被其他窗口遮挡时这样做。

不幸的是, [NSWindow isVisible] 不显示窗口是否在屏幕上实际可见,而只显示它是否在屏幕上。这意味着如果窗口在窗口列表中但被其他窗口完全遮挡 isVisible == YES,我的自定义 drawRect 被调用,我最终将所有内容绘制到一个从未使用过的缓冲区中。

有什么方法可以检测 Window 及其内容是否在屏幕上实际可见?

任何帮助将非常感激。

4

1 回答 1

8

在 10.9 上,您可以使用 NSWindow 的 -occlusionState 和相关的委托方法。

从发行说明:

如果窗口的全部内容(包括标题栏和工具栏)被另一个不透明窗口 100% 覆盖,则窗口被视为被遮挡。如果 Windows 被命令离开屏幕、最小化到 Dock 或其他空间,它们也会被遮挡。部分遮挡算作“可见”。</p>

例子:

- (void)windowDidChangeOcclusionState:(NSNotification *)notification
{
    if ([[notification object] occlusionState]  &  NSWindowOcclusionStateVisible) {
        // visible
    } else {
        // occluded
    }
}
于 2014-03-20T04:28:07.320 回答