ios - 如何在 Mac Catalyst 应用程序中收听按键?

标签 ios swift macos mac-catalyst

我有一个简单的 iOS 游戏,我要移植到 Mac。我希望用户能够使用他们的键盘控制游戏。没有原生文本输入(如 UITextFieldUITextView )。

如何在 Mac Catalyst 应用程序中监听按键事件?这似乎并不微不足道。
UIKeyCommand不起作用,因为它似乎是为组合而制作的(例如 cmd+c )。我可以创建一个假文本字段,但我正在寻找一种更简洁的方法来做到这一点。我想听单个字母和数字。

可以集成吗NSResponder::keyDown(with:)不知何故?

最佳答案

您可以只覆盖 pressesBegan 方法。这是我在游戏中用来控制玩家的示例代码。它使用 UIKeyCommand 作为特殊命令键,如箭头键和 key.character 来对特殊字符使用react。
原码来自Apple Catalyst Documentation .

override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {

    var didHandleEvent = false
    for press in presses {
        guard let key = press.key else { continue }
        if key.charactersIgnoringModifiers == UIKeyCommand.inputLeftArrow || key.characters == "a" {
            self.moveLeft(self)
            didHandleEvent = true
        } else if key.charactersIgnoringModifiers == UIKeyCommand.inputRightArrow || key.characters == "d" {
            self.moveRight(self)
            didHandleEvent = true
        } else if key.charactersIgnoringModifiers == UIKeyCommand.inputUpArrow || key.characters == "w" {
            self.moveForward(self)
            didHandleEvent = true
        } else if key.charactersIgnoringModifiers == UIKeyCommand.inputDownArrow || key.characters == "s" {
            self.moveBackward(self)
            didHandleEvent = true
        } else if key.characters == "q" {
            self.turnLeft(self)
            didHandleEvent = true
        } else if key.characters == "e" {
            self.turnRight(self)
            didHandleEvent = true
        }
    }

    if didHandleEvent == false {
        // Didn't handle this key press, so pass the event to the next responder.
        super.pressesBegan(presses, with: event)
    }
}

关于ios - 如何在 Mac Catalyst 应用程序中收听按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60820752/

相关文章:

ios - UIButton 没有设置居中

swift - mapView中firebase的下载地址

c - 在 C 中#ifdef 中定义常量

json - 解析 json,填充 Collection View Swift 4.2

ios - UITable,如何在 Swift IOS 中将委托(delegate)分配给 UITable

asp.net - 在 Parallels for mac 中运行 Visual Studio - 调试位于 os x 驱动器中的站点的问题

macos - 在沙盒应用程序中验证 OS X 用户名/密码

ios - 我无法解决这个 NSInvalidArgumentException

iphone - 如何最好地将大量文本导入 iPhone 应用程序?

iphone - 在一个 View 上执行一个 Action ,而该 Action 在另一个 View 上做某事?这可能吗?