没有标题栏没有键盘捕获

时间:2015-05-28 06:01:28

标签: macos swift cocoa sprite-kit keyboard-events

我正在尝试使用spriteKit构建动画,并且可以通过键盘控制(箭头键可以加速,减速,回放动画)。

此外,我需要此应用程序具有完全透明的背景,我使用以下方法管理:

scene?.backgroundColor = NSColor.clearColor()

以及:

self.window.opaque = false

到目前为止一切正常,我可以控制动画。但是一旦我尝试通过取消选中右侧面板上的窗口框来删除Interface Builder中的标题栏,键盘捕获就会停止工作。

keyDown:不再被调用了,当你的mac告诉你键盘输入不是一个选项时,我得到'dong'声音的特征。即使我在菜单栏上仍然有我的应用程序的名称。

当标题关闭时,还有什么方法可以接收键盘输入吗?

2 个答案:

答案 0 :(得分:4)

如果窗口没有标题栏,默认情况下NSWindow个实例会从false返回canBecomeKeyWindow。以下引用来自NSWindow类引用中的相关部分。

  

如果此方法返回false,则尝试使窗口成为关键窗口。如果窗口有标题栏或调整大小条,则NSWindow实现返回true,否则返回false。

因此,要获得您需要继承NSWindow后的行为,并从true返回canBecomeKeyWindow

答案 1 :(得分:1)

正如Paul Pattersion所指出的那样(接受了答案),诀窍是将NSWindow子类化,以便为canBecomeKeyWindow返回true。对于任何想知道如何做的人,这里是代码:

import Cocoa

class CustomWindow: NSWindow {
    override var canBecomeKeyWindow: Bool {
        get { return true }
    }
}