我正在为我的OpenGL窗口在OS X中添加全屏视图。我不使用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];
}
}
这似乎基本上可以正确工作,可以在全屏窗口(根据苹果的文档这里)和半屏分辨率窗口之间切换。 问题在于,在两种模式之间切换会使我的窗口“失去焦点”。如果我在切换模式后立即按下我正在使用的键盘快捷方式,我会得到OS X错误提示音。在我能再次使用开关之前,我必须单击窗口以“重新激活”它。 我已经尝试在我的函数中添加
[self makeKeyAndOrderFront:nil];
,但这并没有解决问题。除了这个问题之外,这种方法完美地工作,并且不需要对我的NSView
进行任何更改。
编辑
不确定是否相关,但我是通过编程方式创建此窗口的,而不是从Nib加载它。
-canBecomeKeyWindow
方法:-(BOOL)canBecomeKeyWindow { return YES; } 另外,我建议使用`-setFrame:display:animate:`而不是`-setFrame:display`,这样您将获得漂亮的动画效果。
- Justin BoocanBecomeKeyWindow
似乎没有什么区别。至于渲染,我正在使用CVDisplayLink
:-) - KyleNSWindowController
可以解决这个问题,但对我来说并没有起作用。 - Kyle