如何使Mac OSX Cocoa应用程序全屏显示?

21

我一直在尝试让我的Mac应用程序进入全屏模式,但是无法使其正常工作。根据苹果开发者中心的说明,我应该使用enterFullScreenMode:withOptions:方法,但是显示该方法未找到。

我在Google上搜索到很多人都有制作应用程序全屏的问题,那么应该如何解决呢?

编辑:

当然enterFullScreenMode是针对NSView的,而我却将其用于NSWindow上;我想要全屏的不是视图,而是窗口。但是我找不到NSWindow的任何函数。


使 NSWindow 的 contentView 进入全屏模式。 - hauntsaninja
我一直在阅读(http://www.cocoabuilder.com/archive/cocoa/201569-nsview-enterfullscreenmode-withoptions-woes-window-levels.html),似乎`enterFullScreenMode:withOptions:`几乎是无用的,如果你想做任何有用的事情。如果想要控制动画转换、窗口等级、菜单栏/码头显示等内容,我认为你需要使用一些Carbon难搞的东西。 - Jonathan Sterling
4
只需使用 [[window contentview] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];,您就可以像正常的 NSView 一样做任何事情,包括添加 CoreAnimation 层和 OpenGL 层/视图。 - hauntsaninja
2
@Jonathan Sterling:如果我没记错的话,不需要使用Carbon,只需要使用一些CoreGraphics函数。我同意API有点令人生畏,但实际上并不那么糟糕。 - Chuck
@Chuck,非常抱歉,是我的错误。谢谢!(如果有人看到这条消息,请忽略我之前写的内容!) - Jonathan Sterling
4个回答

21

Lion有一些新的API可以用于全屏。

要使用NSWindow实现全屏,按照以下步骤进行:

[window setCollectionBehavior:
          NSWindowCollectionBehaviorFullScreenPrimary];

要使用NSApplication实现此操作,请执行以下操作

[[NSApplication sharedApplication]
        setPresentationOptions:NSFullScreenWindowMask];

关于此问题的更多信息,请点击这里


13

现代的Mac OS X开发人员(使用Storyboard)只需单击其main.storyboard,选择NSWindow(而非NSWindowController),使用右侧面板查找属性面板(在标尺左侧,看起来像一个拖动条),查找“全屏”并选择“主窗口”,而不是其默认值“不支持”。您也可以设置辅助窗口,如果这是您想要的。

不要抵制变化,使用Storyboard。我们之中的一员......


你也可以使用普通的XIB(NIB)来完成这个。你不需要使用storyboards。在storyboards中如何处理基于文档的应用程序?我发现默认设置非常烦人,因为文档被拆分成一个单独的场景,这增加了额外的工作量,所以我必须在代码中将文档与我的视图控制器连接起来,使得storyboard感觉不完整。对于iOS应用程序,我仍然主要使用代码中的视图,因为我不喜欢segues,而且我在代码中更有效率。对于Mac应用程序,我倾向于使用NIBs,但我仍然需要编写一些视图代码。 - Joel
@Ethan,看不到“Unsupported value”,现在全屏是强制的吗? - Dima Deplov

7

正如Jonathan在评论中提供的链接所述,enterFullScreen:withOptions:存在许多缺点,这可能会让你抓狂。最好的全屏方法仍然是老旧的CGDirectDisplay API。Cocoa Dev Central有一篇关于全屏应用程序的文章,几乎涵盖了您需要了解的所有内容。

您会注意到该文章非常古老,而且自那时以来开发工具已经发生了很大变化(Project Builder!啊,那些美好的日子),但代码本身仍然可用。


0
[self.view setFrame:[[NSScreen mainScreen] visibleFrame]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接