I want to add a segue in my Reality Kit project between a simple swiftUI page and the AR camera ContentView. Here is my SegueView, the swiftui page that has a button which I want to segue to the AR view.
struct SegueView: View {
@State private var isActive: Bool = false
var body: some View {
NavigationLink(destination: ContentView(rootActive: $isActive), isActive: $isActive, label: {
Text("See in AR")
})
}
}
Here is the code from my ContentView, which only renders a box:
struct ContentView : View {
@Binding var rootActive: Bool
var body: some View {
return ARViewContainer().edgesIgnoringSafeArea(.all)
}
}
struct ARViewContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
// Load the "Box" scene from the "Experience" Reality File
let anchor = AnchorEntity(plane: .horizontal)
let box = ModelEntity(mesh: MeshResource.generateBox(size: 0.3), materials: [SimpleMaterial(color: .blue, isMetallic: true)])
anchor.addChild(box)
// Add the box anchor to the scene
arView.scene.anchors.append(anchor)
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
I followed this tutorial to create the segue, but it doesn't contain an AR view and I cannot find a tutorial that does. I also have to add the rootActive variable in the app delegate here:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView(rootActive: .constant(true))
// Use a UIHostingController as window root view controller.
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
return true
}
But since the tutorial doesn't have this step, I'm not entirely sure what to do. When I run the app, only the ContentView gets rendered. Does anyone know how I can create a segue where the SegueView is rendered first, and then when the navigation link "see in AR" is pressed, it goes to the ContentView?
Thanks!
In ContentView, put NavigationLink inside NavigationView.
import SwiftUI
import RealityKit
struct ContentView: View {
var body: some View {
NavigationView {
ZStack {
Color.black
VStack {
NavigationLink(destination: Reality().ignoresSafeArea()) {
Text("Go to ARView")
.foregroundColor(.cyan)
.font(.title3)
}
}
}.ignoresSafeArea()
}
}
}
ARView
struct Reality: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let model = ModelEntity(mesh: .generateSphere(radius: 0.2))
let anchor = AnchorEntity(plane: .horizontal)
anchor.addChild(model)
arView.scene.anchors.append(anchor)
return arView
}
func updateUIView(_ uiView: ARView, context: Context) { }
}
P. S.
In project's Info
tab add key Privacy - Camera Usage Description
.