前提・実現したいこと
キーボードの特定のボタンでイベントを発生させたい。
例えば、+ボタンを押した時にフォントサイズが大きくなるような動きをさせたい。
該当のソースコード
swift
1struct ContentView: View { 2 @ObservedObject var SizeChange:fontSizeChange 3 var body: some View { 4 Text("Hello, World!") 5 .font(.system(size: SizeChange.font_size)) 6 .background(KeyEventHandling(SizeChange: SizeChange)) 7 } 8} 9 10 11struct KeyEventHandling: NSViewRepresentable { 12 @ObservedObject var SizeChange:fontSizeChange 13 class KeyView: NSView { 14 override var acceptsFirstResponder: Bool { true } 15 override func keyDown(with event: NSEvent) { 16 super.keyDown(with: event) 17 //+キーが押された時 18 if event.charactersIgnoringModifiers == "+"{ 19 //押されるたび+5 20 SizeChange.font_size += 5 //・・・・・・・・・① 21 } 22 } 23 } 24 25 func makeNSView(context: Context) -> NSView { 26 let view = KeyView() 27 DispatchQueue.main.async { 28 view.window?.makeFirstResponder(view) 29 } 30 return view 31 } 32 func updateNSView(_ nsView: NSView, context: Context) { 33 } 34} 35 36 37class fontSizeChange:ObservableObject{ 38 //最初のフォントサイズは20 39 @Published var font_size:CGFloat = 20 40}
発生している問題・エラーメッセージ
上記コードの①と記載されている箇所に以下のエラーが出ます。
Instance member 'SizeChange' of type 'KeyEventHandling' cannot be used on instance of nested type 'KeyEventHandling.KeyView'
試したこと
public var で変数を作って、それに代入して加算してみましたが、もちろん値は変わらず。
ですが、public var には代入できました。
public var をObservedObjectに代入してView更新ができるか考えましたが、それもできず。
fnctionを作成して①の箇所で呼び出すということもうまくいきませんでした。
どうか解決方法ありましたらご教示願います。
6/30追記
現状タイマーを使用し、onReceiveで、グローバル変数に格納した値を、ObservedObjectに一定時間ごとに合わせる方法で行っていますが、より良い方法を知っている方がいらっしゃいましたらご教示願いたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。