Как узнать, является ли NSWindow полноэкранным в Mac OS X Lion? - PullRequest
14 голосов
/ 25 июля 2011

Думаю, мне следует проверить, содержит ли [NSApplication presentationOptions] NSFullScreenModeApplicationPresentationOptions, но как мне этого добиться?

РЕДАКТИРОВАТЬ: использование [NSApplication presentationOptions] не работает, так как в моем приложении на основе документов может бытьнекоторые документы в полноэкранном режиме, а другие нет.Я сейчас ищу другое решение.Мне интересно, почему нет свойства с именем [NSWindow isFullscreen] или чего-то подобного.

Ответы [ 4 ]

30 голосов
/ 10 августа 2011

Я просто искал решение для себя и, основываясь на ответе Матье, создал в NSWindow категорию, которая отлично работает для меня.

@interface NSWindow (FullScreen)

- (BOOL)mn_isFullScreen;

@end

@implementation NSWindow (FullScreen)

- (BOOL)mn_isFullScreen
{
    return (([self styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask);
}

@end
10 голосов
/ 25 июля 2011

Вам необходимо использовать оператор & bitwise, чтобы проверить, используется ли эта опция.Не проверено, но, вероятно, что-то вроде этого:

- (BOOL) inFullScreenMode {
    NSApplicationPresentationOptions opts = [[NSApplication sharedApplication ] presentationOptions];
    if ( opts & NSApplicationPresentationFullScreen) {
       return YES;
    }
    return NO;
}

Чтобы увидеть, находятся ли какие-либо из ваших окон в полноэкранном режиме, просто проверьте маску стиля окна.

NSUInteger masks = [someNSWindow styleMask]
if ( masks & NSFullScreenWindowMask) {
 // Do something
}
2 голосов
/ 25 января 2017

Для Swift 3.0

if let window = NSApp.mainWindow {
    let isWindowFullscreen = window.styleMask.contains(NSFullScreenWindowMask)
}

Очевидно, что для исходного вопроса вы бы заменили NSApp.mainWindow на любое окно документа, которое хотите проверить.

0 голосов
/ 02 мая 2019

То, как я справлялся с этим до 10.7 (где не было ни NSApplicationPresentationFullScreen, ни NSFullScreenWindowMask), было проверкой

if ([mainWindow frame].size.height == [[mainWindow screen] frame].size.height)
{
    // window is fullscreen
}

и этот кусок действительно старого кода, похоже, все еще работает не только на "Lion", но и на сегодняшней - на момент написания 10.14.x - ОС.

...