iOS -使用AudioKit的UIKit视图中的SwiftUI

kh212irz  于 2023-03-11  发布在  Swift
关注(0)|答案(1)|浏览(243)

我是Swift和MVVM的新手,所以如果我误解了这里的一些架构并说了一些完全错误的话,我很抱歉。
我有一个使用UIKit用Swift编写的应用程序,它的主视图控制器使用AudioKit生成一些声音。我想向该视图添加一个可视化工具,使用AudioKitUI库从应用程序在故事板视图中生成的音频生成可视化效果似乎是合适的。
AudioKitUI的大部分东西似乎都在后端的SwiftUI中。我已经考虑过使用UIHostingController,但我得到一个错误,即由于内部保护级别,无法访问初始化程序。如果我将SpectrogramView.swift from the AudioKitUI GitHub复制/粘贴到Swift文件中,我能够成功生成预览。

我尝试将其放入容器视图内的UIHostingController中,但我不知道如何让声谱图真实的读取不在该视图中的音频节点。因此,它将UIHostingController放入主视图控制器中,将其添加为子视图,并将其添加为空白UIView的子视图。
我不知道如何让这个SwiftUI可视化生成器与UIKit一起工作,更不用说在我的ViewController的子视图中了。任何提示或建议都将不胜感激。
这是我最近的一次尝试:

@IBOutlet var blankView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    let spectroView = UIHostingController(rootView: SpectrogramView(node: sound.mixer))
    addChild(spectroView)
    blankView.addSubview(spectroView.view)
    }
ql3eal8s

ql3eal8s1#

看起来我在最初的帖子中的代码片段并不遥远。这里是完整的一节,让AudioKitUI频谱图视图在UIView中工作。

@IBOutlet weak var blankView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    //enable transport controls as buttons
    let spectroView = UIHostingController(rootView: SpectrogramView(node: sound.mixer))
    addChild(spectroView)
    spectroView.view.frame = blankView.bounds
    blankView.addSubview(spectroView.view)
    spectroView.didMove(toParent: self)
    }

声谱图视图现在成功地出现在我的主视图控制器的子视图中。

相关问题