英文:
iOS - SwiftUI inside a UIKit View using AudioKit
问题
抱歉,以下是您提供的文本的翻译:
" I'm fairly new to Swift and MVVM, so my apologies if I misunderstand some of the architecture here and say something completely wrong.
我对Swift和MVVM相对陌生,如果我对这里的一些架构有所误解并说了一些完全错误的话,请原谅。
I have an app written in Swift using UIKit with a main view controller that generates some sounds using AudioKit. I'd like to add a visualizer to that view, and it seems appropriate to use the AudioKitUI library to generate a visualization from the audio that my app is generating while in that storyboard view.
我有一个使用Swift和UIKit编写的应用程序,其中有一个主视图控制器,使用AudioKit生成一些声音。我想在该视图中添加一个可视化效果,似乎可以使用AudioKitUI库从我的应用程序生成的音频中生成可视化效果。
Most of the AudioKitUI stuff seems to be in SwiftUI on the backend. I've looked at using a UIHostingController but I get an error that the initializer is inaccessible due to internal protection level. If I copy/paste the SpectrogramView.swift from the AudioKitUI GitHub into a swift file, I am able to generate a preview successfully.
大部分的AudioKitUI内容似乎都在后端使用SwiftUI。我尝试使用UIHostingController,但遇到了初始化器不可访问的错误,因为它受到内部保护级别的限制。如果我将AudioKitUI GitHub中的SpectrogramView.swift文件复制/粘贴到一个Swift文件中,我可以成功生成预览。
I tried to put it into a UIHostingController inside a Container View, but I didn't exactly see how I should have the spectrogram read the audio node in real time if it's not in that view. So it put the UIHostingController inside my main view controller, added it as a child view, and added it as a subview to a blank UIView.
我尝试将其放入一个Container View中的UIHostingController,但我没有确切地看到如何使光谱图实时读取音频节点,因为它不在该视图中。所以我将UIHostingController放在我的主视图控制器中,将其添加为子视图,并将其添加为一个空白的UIView的子视图。
I'm not sure how to get this SwiftUI Visualization generator to work with UIKit, let alone inside one of my ViewController's sub views. Any tips or advice would be greatly appreciated.
我不确定如何使这个SwiftUI可视化生成器与UIKit一起工作,更不用说放在我的一个ViewController的子视图中。任何提示或建议将不胜感激。
This was my most recent attempt:
这是我最近的尝试:
@IBOutlet var blankView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let spectroView = UIHostingController(rootView: SpectrogramView(node: sound.mixer))
addChild(spectroView)
blankView.addSubview(spectroView.view)
}"
英文:
I'm fairly new to Swift and MVVM, so my apologies if I misunderstand some of the architecture here and say something completely wrong.
I have an app written in Swift using UIKit with a main view controller that generates some sounds using AudioKit. I'd like to add a visualizer to that view, and it seems appropriate to use the AudioKitUI library to generate a visualization from the audio that my app is generating while in that storyboard view.
Most of the AudioKitUI stuff seems to be in SwiftUI on the backend. I've looked at using a UIHostingController but I get an error that the initializer is inaccessible due to internal protection level. If I copy/paste the SpectrogramView.swift from the AudioKitUI GitHub into a swift file, I am able to generate a preview successfully.
I tried to put it into a UIHostingController inside a Container View, but I didn't exactly see how I should have the spectrogram read the audio node in real time if it's not in that view. So it put the UIHostingController inside my main view controller, added it as a child view, and added it as a subview to a blank UIView.
I'm not sure how to get this SwiftUI Visualization generator to work with UIKit, let alone inside one of my ViewController's sub views. Any tips or advice would be greatly appreciated.
This was my most recent attempt:
@IBOutlet var blankView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let spectroView = UIHostingController(rootView: SpectrogramView(node: sound.mixer))
addChild(spectroView)
blankView.addSubview(spectroView.view)
}
答案1
得分: 0
似乎我的原始帖子中的代码片段并不远离正确。以下是使AudioKitUI Spectrogram View在UIView中工作的完整部分。
@IBOutlet weak var blankView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// 在加载视图后执行任何额外的设置。
// 将传输控件启用为按钮
let spectroView = UIHostingController(rootView: SpectrogramView(node: sound.mixer))
addChild(spectroView)
spectroView.view.frame = blankView.bounds
blankView.addSubview(spectroView.view)
spectroView.didMove(toParent: self)
}
现在,频谱图视图成功地出现在我的主视图控制器的子视图中。
英文:
It seems my code snippet in the original post wasn't far off. Here is the completed section to get the AudioKitUI Spectrogram View to work in a 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)
}
The spectrogram view now successfully appears in a subview of my main view controller.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论