Hello!
I am using the wrapper, UIHostController. It is doing what it is designed to do - to wrap my SwiftUI components in a UIKit project.I have AR components that I have stored locally in my mac it would appear on the bottom showing an HStack with the thumbnails. When pressed it would load. When I run the entire code - it works fine in SwiftUI when I am just calling ContentsView. As for pushing it to UIKit, it appears the thumbnails on the bottom are missing.
Here is my Host Controller code for wrapping:
import UIKit
import SwiftUI
import AVFoundation
class ARHostingController: UIViewController{
let arView = UIHostingController(rootView: ContentsView())
private var heightConstraint: NSLayoutConstraint?
override func viewDidLoad() {
super.viewDidLoad()
heightConstraint = arView.view.heightAnchor.constraint(equalToConstant: 0)
addChild(arView)
view.addSubview(arView.view)
arView.didMove(toParent: self)
// arView.view.sizeToFit()
setupConstraints()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
arView.view.sizeToFit()
heightConstraint?.constant = arView.view.bounds.height
heightConstraint?.isActive = true
}
fileprivate func setupConstraints() {
arView.view.translatesAutoresizingMaskIntoConstraints = false
arView.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
arView.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
arView.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
arView.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
}
ContentsView (in SwiftUI) code:
`import SwiftUI
struct ContentsView: View {
@State private var isPlacementEnabled = false
@State private var selectedModel: Model?
@State private var modelConfirmedForPlacement: Model?
private var models: [Model] = {
let fileManager = FileManager.default
guard let path = Bundle.main.resourcePath,
let files = try? fileManager.contentsOfDirectory(atPath: path) else {
return []
}
return files
.filter { $0.hasSuffix(".usdz") }
.compactMap { $0.replacingOccurrences(of: ".usdz", with: "") }
.compactMap { Model(modelName: $0 ) }
}()
var body: some View {
ZStack(alignment: .bottom) {
ARViewRepresentable(
modelConfirmedForPlacement: $modelConfirmedForPlacement
)
if isPlacementEnabled {
PlacementButtonView(
isPlacementEnabled: $isPlacementEnabled,
selectedModel: $selectedModel,
modelConfirmedForPlacement: $modelConfirmedForPlacement
)
} else {
ModelPickerView(
isPlacementEnabled: $isPlacementEnabled,
selectedModel: $selectedModel,
models: models
)
}
}
// .onAppear(){
// self.viewModel.fetchData()
// }
}
}`