4

キーボードイベントをインターセプトするのに問題があります。iOS を SteelSeries Free (ゲームパッド コントローラー) に接続しました。iOS に接続すると、Bluetooth キーボードとして検出されます。これは Notes を開いたときにテストされ、ゲームパッドのボタンを押すと文字が書き込まれます。

このボタンの押下をインターセプトして独自の機能を実行する必要がありますが、残念ながらそれができません。

GCController を使用しようとしましたが、どうやらゲーム コントローラー オブジェクトとして検出されません。カウントを印刷すると、0と表示されます。以下の私のコード。

let gameControllers = GCController.controllers() as! [GCController]
println("configureConnectedGameControllers count: \(gameControllers.count)")

ゲームパッドがBluetoothキーボードとして検出されたため、ゲームコントローラーとして検出されなかったと思いました。そこで、代わりに UIKeyCommand を使用しようとしました。以下は私のコードです:

override func viewDidLoad() {
    super.viewDidLoad()

    var keys = [UIKeyCommand]()
    for digit in "abcdefghijklmnopqrstuvwxyz"
    {
        keys.append(UIKeyCommand(input:  String(digit), modifierFlags: .Command, action:  Selector("keyPressed:")))
        keys.append(UIKeyCommand(input: String(digit), modifierFlags: .Control, action:  Selector("keyPressed:")))
        keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action:  "pressKey"))
    }
}

override func canBecomeFirstResponder() -> Bool {
    return true
}

func keyPressed(command: UIKeyCommand) {
    println("another key is pressed") //never gets called
}

func pressKey() {
    println("a key is pressed")
}

しかし、上記の実装でも、ゲームパッドのボタンを押してもコンソールには何も出力されません。

これは私を混乱させます。それで、これに対する答えを知っているなら、私を助けてください。前もって感謝します!

4

1 に答える 1

6

私はついにそれを機能させることができました。以下は、誰かがそれを必要とする場合のコードです。

var keys = [UIKeyCommand]()

override func viewDidLoad() {
    super.viewDidLoad()
    //configureGameControllers()

    for digit in "abcdefghijklmnopqrstuvwxyz"
    {
        keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action:  Selector("keyPressed:")))
    }
}

override func canBecomeFirstResponder() -> Bool {
    return true
}

override var keyCommands: [AnyObject]? {
    get {
        return keys
    }
}


func keyPressed(command: UIKeyCommand) {
    println("user pressed \(command.input)")
}
于 2015-08-18T01:58:24.473 に答える