如何解决如何在SwiftUI中使用AudioKit?在视图中更改状态var
我添加了一个侦听器:
class MIDIReceiver: MIDIListener {
...
}
我应该在SwiftUI的下面放置以下代码,以便可以使用Midi键盘更改@State var?
let midi = MIDI()
midi.openInput()
let receiver = MIDIReceiver()
midi.addListener(receiver)
谢谢
-新增10月28日-
(1) 我在上课 https://github.com/AudioKit/Cookbook/blob/main/Cookbook/Cookbook/Recipes/MIDIMonitor.swift 但没有风景...
添加@ObservedObject后,var Conductor = MIDIMonitorConductor() 在我的ContentView中,这些内容会显示在我的控制台中。
2020-10-28 00:47:19.646934-0500 AudioKitTrySPM [2998:82471] [midi] MIDI.swift:init():52:初始化MIDI(MIDI.swift:init():52)
2020-10-28 00:47:19.698885-0500 AudioKitTrySPM [2998:82471] [plugin] AddInstanceForFactory:没有为id注册的工厂
我应该在项目中进行其他更改吗?
(2) 我的contentview中有一个State数组
@State private var touchKeys: Array<Bool> = [Bool](repeating: false,count: 24)
我如何触发一个函数来映射midi信号以更新阵列?
谢谢
解决方法
您可以将接收器设置为ObservableObject,并将发布的属性用于希望SwiftUI视图依赖/刷新的值/状态。
例如下面的示例:
import Combine
class MIDIReceiver: MIDIListener: ObservableObject {
@Published var midiSignalReceived = false
private let midi: MIDI!
func setup() {
midi = MIDI()
midi.openInput()
midi.addListener(self)
}
// ... other code / midi callbacks here
}
// ...
struct ContentView: View {
@StateObject var midiListener = MIDIListener()
var body: some View {
Text("Root View")
.onReceive(midiListener.$midiSignalReceived) { activated in
// do something here
}
.onAppear {
self.midiListener.setup()
}
}
}
请参阅AudioKit iOS - receivedMIDINoteOn function中的示例事件/状态
,AudioKit Cookbook包含一个简单的MIDI监视器,并使用SwftUI。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。