objective-c - 使 Cocoa 窗口全屏显示

标签 objective-c macos cocoa opengl fullscreen

我目前正在为 OS X 中的 OpenGL 窗口添加全屏 View 。我没有使用 OS X 的“全屏模式”,因为我不喜欢接管用户屏幕的想法。

我有自己的派生自 NSWindow 的自定义窗口类,在那个类中,我已经覆盖了 toggleFullscreen: 选择器:

- (void)toggleFullScreen:(id)sender
{
    _fullscreen = !_fullscreen;
    if(_fullscreen) {
        NSRect screenRect = [[NSScreen mainScreen] frame];
        [self setStyleMask:NSBorderlessWindowMask];
        [self setFrame:screenRect display:YES];
        [self setLevel:NSMainMenuWindowLevel+1];
        [self setOpaque:YES];
        [self setHidesOnDeactivate:YES];
    } else {
        NSRect screenRect = [[NSScreen mainScreen] frame];
        unsigned int width = (unsigned int)(screenRect.size.width/2.0f);
        unsigned int height = (unsigned int)(screenRect.size.height/2.0f);
        NSRect frame = NSMakeRect(0, screenRect.size.height-height, width, height);

        [self setStyleMask:NSTitledWindowMask | NSResizableWindowMask];
        [self setFrame:frame display:YES];
        [self setLevel:NSNormalWindowLevel];
        [self setOpaque:YES];
        [self setHidesOnDeactivate:NO];
    }
}

这似乎大部分工作正常,在全屏窗口(根据 Apple 文档 here)和屏幕分辨率一半的窗口之间切换。

问题是在两种模式之间切换会使我的窗口“失去焦点”。如果我在切换模式后立即使用我正在使用的键盘快捷键,我会收到 OS X 错误“哔”。我必须在窗口中单击以“重新激活”它,然后才能再次使用切换开关。

我已经尝试将 [self makeKeyAndOrderFront:nil]; 添加到我的函数中,但这并不能解决问题。我所需要的只是一种在过渡期间保持窗口“聚焦”的方法。除了那个问题,此方法工作完美,不需要更改我的 NSView

编辑

不确定它是否相关,但我正在以编程方式创建此窗口,而不是从 Nib 加载它。

最佳答案

一个更简单的方法,这似乎是正确的现代方法(从 Lion 开始)...

在我的 NSApplicationDelegate 的 init 方法中(抱歉我是新手所以我的术语是错误的),在创建窗口之后...

[窗口 setCollectionBehavior:(NSWindowCollectionBehaviorFullScreenPrimary)];

然后启动一个 toggleFullScreen,从你的菜单中说,target = nil。

然后它将创建一个带有图标的新命名桌面,将您的窗口滑动到它并使其全屏显示。就像将 Google Chrome 或 Safari 设为全屏时一样。我也是在没有 Nib 或 xib 或者现在 children 怎么调用它的情况下做的。

This page讨论如何以 Interface Builder 的方式进行操作。

This是有关该主题的官方 Apple 文档。

关于objective-c - 使 Cocoa 窗口全屏显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433832/

相关文章:

ios - 自定义委托(delegate)返回 nil 值

iphone - 从地址簿添加联系人时 EXC_BAD_ACCESS?

cocoa - 自定义 NSWindowController 子类

objective-c - 以编程方式从 iPhoto 图库中读取

objective-c - 通过 PubNub 从 Parse 发布消息

ios - 从非 TabBarViewController 或 ContainerViewController 添加 tabBarItem?

macos - 在 mac os x 上运行 cf 命令时出现权限被拒绝错误

Laravel 黄昏 chrome 驱动程序超时

windows - 在 Windows 上呈现类似 Mac 的文本?

objective-c - 在进行消息转发时避免编译器警告