Подтвердить что ты не робот

Как узнать, является ли NSWindow полноэкранным в Mac OS X Lion?

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

EDIT: использование [NSApplication presentationOptions] не работает, так как в моем приложении на основе документов могут быть некоторые документы в полноэкранном режиме, а другие нет. Теперь я ищу другое решение. Мне интересно, почему нет свойства под названием [NSWindow isFullscreen] или что-то в этом роде.

4b9b3361

Ответ 1

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

@interface NSWindow (FullScreen)

- (BOOL)mn_isFullScreen;

@end

@implementation NSWindow (FullScreen)

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

@end

Ответ 2

Для проверки того, что этот параметр используется, вам необходимо использовать бит и побитовый оператор. Не проверено, но возможно что-то вроде этого:

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

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

NSUInteger masks = [someNSWindow styleMask]
if ( masks & NSFullScreenWindowMask) {
 // Do something
}

Ответ 3

Для Swift 3.0

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

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

Ответ 4

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

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

и этот кусок действительно старого кода, кажется, все еще работает сегодня.