【问题标题】:How do I listen to key presses in a Mac Catalyst app?如何在 Mac Catalyst 应用程序中收听按键?
【发布时间】:2020-07-04 08:10:43
【问题描述】:

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

如何在 Mac Catalyst 应用程序中收听按键事件?这似乎并不简单。

UIKeyCommand 不起作用,因为它似乎是为组合而设计的(例如cmd+c)。我可以创建一个假文本字段,但我正在寻找一种更简洁的方法来做到这一点。我想听单个字母和数字。

我可以以某种方式集成NSResponder::keyDown(with:) 吗?

【问题讨论】:

    标签: ios swift macos mac-catalyst


    【解决方案1】:

    你可以重写 pressesBegan 方法。这是我在游戏中用来控制玩家的示例代码。它使用 UIKeyCommand 作为特殊命令键,如箭头键和 key.character 对特殊字符做出反应。 原始代码来自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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 2021-09-24
      • 2023-02-19
      • 2021-06-04
      • 2020-07-03
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多