- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在OS X中开发应用程序,而只是试图将应用程序设置为全屏。我做了一些研究,发现我需要从放置在sharedApplication
方法中的applicationDidFinishLaunching
对象调用一个函数。
[[NSApplication sharedApplication] setPresentationOptions:NSApplicationPresentationFullScreen];
setPresentationOptions called with NSApplicationPresentationFullScreen when there is no visible fullscreen window; this call will be ignored.
最佳答案
好的,我希望这是一个有用的答案。
首先,我将讨论iOS和Mac之间的基本应用程序开发差异,并将继续介绍如何使用NSWindowController,然后尝试解释为什么您所做的操作会导致意外行为!
iOS和Mac之间的差异
笔尖
因此,在Mac开发中(我也来自iOS开发)有趣的是,AppKit中没有相同的函数调用UIApplicationMain
;那是有一个功能NSApplicationMain
;但是它们的签名是不同的。在iOS中,可以为应用程序指定UIApplication
子类和UIApplicationDelegate
类,但在Mac中,不能指定NSApplication
子类和NSApplicationDelegate
类。话虽如此,人们可能会混淆AppDelegate
的工作方式或使用自定义NSApplication
的方式。首先,在Info.plist
中有一个键NSPrincipalClass
,它告诉系统该应用程序使用哪个NSApplication
子类。不幸的是,委托并不是那么简单。 Info.plist
还有另一个键NSMainNibFile
,它告诉系统最初使用的笔尖。它以应用程序的所有者的身份加载该笔尖,并自动添加一些默认连接:
应用程序代表:这是设置您的应用程序代表的位置。如果您发现该对象具有类AppDelegate
(或PREFIXAppDelegate
)。因此,这里笔尖将自动分配这些类之一,并将委托连接分配给文件所有者,从而在NSApplication
上设置委托。
字体管理器:这将代表Mac上共享的NSFontManager
。它为菜单项添加了一些连接,这些连接与选择字体的系统用户体验保持一致。
主菜单:这是您看到的顶部菜单。如果您想自定义此功能,可以在此笔尖中进行。
笔尖的论点
那么为什么要使用笔尖呢?就像我提到的那样,我个人来自iOS,个人也不总是喜欢笔尖。用代码来做所有事情,事情变得更加灵活。在Mac应用程序中,我觉得您在使用笔尖时不会失去灵活性。笔尖通常是创建mac应用程序的标准(据我所知)(标准通常是有原因的)。此外,创建Mac应用程序的一个相当关键的方面是设置NSMainNibFile
键来加载笔尖!
以编程方式
如果现在您遵循的是“ ya ya,但仍然,笔尖,ew!”那么我会尝试在这里指导您。快速警告,自从我尝试以编程方式完成所有操作以来已有一段时间了,因此某些信息可能会歪斜!有了这个说,让我们深入研究吧!
我至少可以相信,您可以将NSPrincipalClass
中的Info.plist
键设置为自定义子类。然后在该子类中重写-init
*以将NSApplication
的委托设置为您的自定义委托类。在这里,您的代表将正常工作,并且您的应用程序应可按预期运行(因此不需要笔尖)。还要注意,您可以简单地将NSApplication
子类化,或者将自身设置为它自己的委托(从设计POV来看,这有点奇怪),也可以不设置委托而仅重写某些方法(在某些情况下调用super)。除了代替一起使用委托,您还可以实例化一个通知侦听器对象,该对象仅侦听NSApplicationDidFinishLaunchingNotification
之类的通知。
NSWindowController
窗口控制器本质上是窗口化应用程序的基类(请确保可以反驳,但这是一个很好的起点)。如您所知,您只是将NSWindowController子类化,然后为其分配一个实例并调用-showWindow:
。
笔尖
正如文档所述,您不需要与NSWindowController一起使用的笔尖,但是“窗口控制器和笔尖文件之间的关系很重要”(引自文档)。您只需创建一个以NSWindowController
作为所有者的笔尖,然后添加一个窗口对象,然后将所有者的window属性分配为要说的窗口,就可以了(注意将窗口的委托设置为所有者)同样也是一个不错的主意-可能有必要!)!当然,如果在创建子类时选中“自动为我创建笔尖”复选框,则会为您创建该笔尖。
笔尖的论点
苹果的文档从本质上说“使用它,就像用电;您不必使用它,但使用起来非常不错”。
以编程方式
所以你想成为阿米什eh? (恶作剧,对不起)。任何人,要以编程方式创建其中一个,首先需要对其进行子类化,然后手动设置window属性(可能在-init
中)或在调用函数/方法中进行设置。
为什么您的项目不起作用?
好吧,当您删除MainMenu.nib
时,您将删除对委托的引用。因此,从未分配您的委托人,因此也永远不会为委托消息调用它。这就是为什么窗口从不显示-从不调用代码的原因。如果删除笔尖内的窗口对象,但保留其余的连接,则代码/应该/可以工作(我刚刚进行了测试,然后我对模板做了一些调整,因此我的测试可能不准确)。
如何全屏显示
创建window controller后,先调用-showWindow:
,然后再调用[windowController.window toggleFullscreen:nil]
。这应该使窗口进入全屏状态(再次测试并为我工作)。
创造艺术
因此,您的最后一个问题是关于重新创建该应用程序的信息。我个人并没有出色的教程来创建一个平面Mac应用程序,但是我学到了一些一般性的原则:
很多子类。与iOS相比,我注意到获得了更深层次的自定义,我需要对更多类进行子类化。例如,NSView本质上不具有backgroundColor属性,因此要添加此属性,您需要对其进行子类化,添加该属性,然后实施-drawRect:
方法以填充该颜色(请注意,这不是/ only /,这将我们带到下一个要点)。
是否支持图层? Mac应用程序中的NSViews本质上在视图的背后并没有CALayer。为了添加图层,您需要在要放置图层的NSView上指定-setWantsLayer:YES
。请注意,根据我的经验,仅从子类中的YES
返回- (BOOL)wantsLayer
是不够的,您实际上需要发送消息。如果您对带有图层的子类化NSView感兴趣,还可以检出- (BOOL)wantsUpdateLayer
,它告诉系统在重绘视图时调用- (void)updateLayer
而不是- (void)drawrect:(NSRect)r
。
忍耐。我注意到我可以很快创建一个外观相当不错的iOS应用。从经验来看,UIKit或其他形式的魔术是未知的。但是,在与AppKit一起创建Mac应用程序时,要花更长的时间才能创建外观和感觉很好的东西。我的信念是,由于您可以使用更多屏幕,可以使用更精确的控件,并且通常可以使用更大的环境,因此可以使用更多选项来探索创建应用程序。因此,该基础应用程序相当简单,因此可以根据自己的需求对其进行自定义!
编辑:添加了一些链接。通常,对于Mac开发,不要忘记阅读this!
*我记得在10.7 / 8中以这种方式进行操作,但没有尝试在10.9中进行此操作
敬请注意:如果您在这篇文章中发现错误(由于时间过长,我假设我说了些愚蠢的话),请在下面认真地纠正我。我鼓励更正,但是我希望他们能受到尊重!
关于objective-c - 如何使用Mavericks API全屏显示您的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23533433/
我从 git 克隆: git clone git://git.apache.org/mesos.git 并且还做了 brew install autoconf automake libtool 然后尝
我已经在 Mavericks 上安装了 XQuartz 2.7.5。在那之后,我用 mplayer 播放的视频似乎加载到了一个单独的窗口中,所有白色都停留在播放音频上。我通过使用 launchctl
最近,我将我的 OS X 更新到了 10.9( Mavericks );不幸的是,尽管我将 Xcode 命令行更新为 OS X Mavericks 的 5.1.1,但 gfortran 停止工作。前段
尝试使用 Homebrew 软件在 mac os x mavericks 上安装 zlib-devel 不起作用: brew install zlib-devel Error: No availabl
更新:我看到有人尝试将 PyCharm 与 SSHFS 结合使用,而 JetBrains 说:“不”。也许这行不通? 我正在尝试在我工作的客户办公室的 SSHFS 安装磁盘上使用 WebStorm —
给定以下程序: #import int main(int argc, char *argv[]) { @autoreleasepool { NSDateFormatter *
我的快速查看生成器以前可以正常工作,但现在坏了。 这是一个错误还是我做错了什么? 这是我的代码: OSStatus GeneratePreviewForURL(void *thisInterface,
我很难让 PhpMyAdmin 在 Mavericks 上工作。 我通过取消注释/etc/apache2/httpd.conf 中的 LoadModule 指令在 apache 中启用了 PHP,我已
我知道还为时过早,但我已经升级到 OSX mavericks,我无法使用 Homebrew 安装 opencv。 ==> Installing dependencies for opencv:
我正在使用 vagrant Geodjango box 并且端口转发对我不起作用。 在盒子上,我运行了: python manage.py runserver 0.0.0.0:8000 但是 http
我一直在用 homebrew在 OSX Mavericks 上有一段时间了,但是我现在正在处理需要将文件添加到那些相同安装程序的文件夹中。 这是输入时的问题: $ brew info ant 我收到
我在前一周升级到 Mavericks,从那以后开始遇到 Homebrew 软件问题。 'brew doctor' 报告没有问题,但我目前正在尝试安装 Apache Thrift,但它失败了。有什么建议
我找不到任何关于此的信息,而且我从未对推送通知做过任何事情(但我模糊地知道它们是如何工作的)。在Mavericks中,既然OS X可以接收来自网站等各种事物的推送通知,那么iPhone模拟器可以接收推
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有一个包含以下文本的 lldb 命令文件: settings set -- auto-confirm true breakpoint set --name main proc
我刚刚更新到 OS X Mavericks 中的命令行工具的最新版本,现在在编译我的(以前工作的)代码时,它会抛出以下错误 > clang: warning: no such sysroot dire
我正在尝试使用此脚本选择“Soundflower (2ch)”作为我的音频输出: tell application "System Preferences" activate set
在早期版本的 OS X 上,Applescript 如下: tell application "System Events" to tell process "Google Chrome" get p
我正在尝试在Genymotion中安装Google Play。但是,当我将zip放到仿真器中时,它会将文件保存在/sd.../中,而不是将其闪烁。我如何获得zip闪存? 最佳答案 如果您使用的是Mac
我的 Java 应用程序有一个构建在另一台服务器计算机上的应用程序。该服务器机器现已升级为 Mavericks + xcode 5.1。早些时候,我遇到了未使用 Mavericks + xcode 5
我是一名优秀的程序员,十分优秀!