前提
Xcode、SwiftUIでmacOSアプリを作っており、タイピングゲーム機能を実現しようとしています。
ユーザーのキーボード入力を@State変数で取得したいのですが、方法がわからなくて困っています。
Swift初心者でありteretailでの質問も初めてなので、情報に不備等あるかと思いますが何卒よろしくお願いいたします。
実現したいこと
SwiftUIで、もしくはUIKitをSwiftUIに組み込んでキーボード入力を@State変数で取得したい。
(取得した変数 == タイプすべきキー)
を判定することでタイピングゲーム機能を実現したいです。
キーボード入力の際にポコポコとした音(beep音と呼ぶのでしょうか?)が鳴らないように実現させたいです。
試したこと
以下のコードはインターネットで見つけたものです。(リンクはhttps://stackoverflow.com/questions/61153562/how-to-detect-keyboard-events-in-swiftui-on-macos)
このコードの
KeyViewクラスのevent.characterIgnoringModifiers ?? "" をContentViewの@State変数として取得し同期することができれば良いのだろうかと思っていますが、その方法が分かりません。
Coordinatorを使うのかなどと考えていますが、その使い方が理解できずにどうにもならなくなり、ここに質問させていただきました。
もちろん、以下のコードと全く異なる方法でのアドバイスも大変助かります。
Swift
1import SwiftUI 2struct KeyEventHandling: NSViewRepresentable { 3 class KeyView: NSView { 4 override var acceptsFirstResponder: Bool { true } 5 override func keyDown(with event: NSEvent) { 6 print(">> key \(event.charactersIgnoringModifiers ?? "")") 7 } 8 } 9 func makeNSView(context: Context) -> NSView { 10 let view = KeyView() 11 DispatchQueue.main.async { // wait till next event cycle 12 view.window?.makeFirstResponder(view) 13 } 14 return view 15 } 16 func updateNSView(_ nsView: NSView, context: Context) { 17 } 18} 19struct ContentView: View { 20 var body: some View { 21 KeyEventHandling() 22 } 23}
アドバイスよろしくおねがいします。
・SwiftUIのほうが慣れているので、SwiftUI中心、またはSwiftUIと共存する方法で教えていただけると幸いです。
・「〇〇で検索すると良いかもしれない」などの情報もいただけると嬉しいです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/21 02:43