如何使NSWindow的toggleFullscreen同步运行(阻塞)

时间:2015-08-12 04:37:20

标签: objective-c macos cocoa

除了toggleFullScreen(以及其他几个)之外,大多数NSWindow的东西都是阻塞的,这是异步的,更糟的是,它也会失败。这个,加上在全屏窗口上调用close()的事实是错误的[1],这让我想要在做任何其他事情之前等待窗口进入/退出全屏(例如,我想等待窗口)在调用close()之前退出全屏。

这样做的好方法是什么(没有轮询定时器,这将是明显的答案)?

[1]它没有退出全屏模式,让你盯着一个空的灰色屏幕,如果你在第一个窗口关闭后创建另一个窗口,它将设置全屏标志 - 这表明这个事实实际上是一个全球性的旗帜。

2 个答案:

答案 0 :(得分:0)

虽然我不确定实际问题是什么,但我想我可以提供一些建议。

如果要防止在全屏和窗口模式之间关闭窗口,可以简单地检查NSWindow的委托方法。 NSWindowDelegate提供了-windowDidExitFullScreen:-windowWillExitFullScreen:等方法,可以在窗口进入状态之间时通知您。最后,您可以使用-windowShouldClose:阻止关闭窗口。

答案 1 :(得分:0)

它是怎么回事:

  1. 开始进入全屏

  2. windowDidEnterFullScreen完成后调用

  3. 现在你想等。

    1b中。有一个保持状态的布尔值。 (_windowIsInFullscreen)。将其设置为NO之前,并将其设置为委托消息中的YES

    1c上。等待:

     while(!_windowIsInFullscreen) {
                        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:.5]];
                NSLog(@"Polling...");
     }
    

    这就是模态的东西也是如此(恕我直言,这很糟糕;)异步规则 - 但这是个人偏好)