【问题标题】:How to make a Mac OSX Cocoa application fullscreen?如何使 Mac OSX Cocoa 应用程序全屏显示?
【发布时间】:2011-06-22 18:09:09
【问题描述】:

一段时间以来,我一直试图让我的 Mac 应用程序进入全屏模式,但无法正常工作。根据苹果开发者中心的说法,我应该使用enterFullScreenMode:withOptions:,它给了我,方法 enterFullScreenMode 没有找到。

我在谷歌上搜索的每个地方似乎都有人在让他们的应用全屏时遇到问题,那么如何让它工作呢?

编辑:

当然enterFullScreenMode 是为NSView 使用的,我在NSWindow 上使用它;这不是我想要全屏的视图,而是窗口。不过我找不到NSWindow 的任何功能。

【问题讨论】:

  • 使NSWindow的contentView进入全屏状态。
  • 我一直在阅读 (cocoabuilder.com/archive/cocoa/…),如果你想做任何有用的事情,enterFullScreenMode:withOptions: 似乎几乎没用。如果你想控制动画过渡、窗口级别、菜单栏/停靠栏隐藏等,我认为你将不得不使用一些 Carbon-nastiness。
  • 只要使用[[window contentview] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];,你就可以做任何事情你可以用普通的NSView做,包括添加CoreAnimation层和OpenGL层/视图。
  • @Jonathan Sterling:IIRC 不需要 Carbon — 只需几个 CoreGraphics 函数。我同意 API 有点强悍,但实际上并没有那么糟糕。
  • @Chuck 太棒了,我的错。谢谢! (任何阅读此内容的人,请忽略我之前写的内容!)

标签: objective-c cocoa macos fullscreen


【解决方案1】:

正如the link Jonathan provided in the comments 中所述,enterFullScreen:withOptions: 有许多缺点,可能会让你想把头发扯下来。最好的全屏方式仍然是旧的 CGDirectDisplay API。 Cocoa Dev Central 有一个article on fullscreen apps,几乎涵盖了您需要了解的所有内容。

您会注意到这篇文章非常古老,并且开发工具从那时起发生了很大变化(Project Builder!啊,过去的美好时光),但代码本身仍然可以工作。

【讨论】:

    【解决方案2】:

    Lion 有一些新的全屏 API。

    要使用 NSWindow 执行此操作,请执行此操作

    [window setCollectionBehavior:
              NSWindowCollectionBehaviorFullScreenPrimary];
    

    要使用 NSApplication 执行此操作

    [[NSApplication sharedApplication]
            setPresentationOptions:NSFullScreenWindowMask];
    

    关于它的更多信息here

    【讨论】:

      【解决方案3】:

      现代 Mac Os X 开发人员(使用故事板)只需点击他们的 main.storyboard,选择 NSWindow(不是 NSWindowController),使用右侧面板找到属性面板(左侧的那个)标尺,它看起来像一个拖动条的东西)查找“全屏”并选择“主窗口”而不是其默认值“不支持”。如果需要,您还可以设置辅助窗口。

      不要抗拒改变,使用故事板。我们中的一个……我们中的一个……

      【讨论】:

      • 您也可以使用普通的旧 XIB (NIB) 执行此操作。你不需要故事板。您如何处理情节提要中基于文档的应用程序?我发现默认设置真的很烦人,文档被分割成一个单独的场景的方式——它增加了额外的工作,所以我不得不在代码中将文档连接到我的视图控制器,所以故事板感觉不完整。对于 iOS 应用程序,我仍然主要使用代码中的视图,因为我不喜欢 segue,而且我的代码效率要高得多。对于 Mac 应用程序,我倾向于使用 NIB,但我仍然需要编写一些视图代码。
      • @Ethan,看不到不支持的值,现在全屏是强制性的吗?
      【解决方案4】:
      [self.view setFrame:[[NSScreen mainScreen] visibleFrame]];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        相关资源
        最近更新 更多