Estoy tratando de mostrar la información del estado de seguimiento de la cámara en la parte superior de la pantalla del dispositivo, pero sigo recibiendo errores por todos mis esfuerzos. Estoy muy confundido con la forma en que ARView funciona con SwiftUI, porque mostrar la experiencia AR y agregar íconos de botones encima es simple, pero para obtener datos de la sesión parece que se necesita más trabajo, ¿alguien podría ayudarme con esto? ¡Gracias!
Error en ViewModel: 'la descripción es una propiedad de solo obtención'
Vista de contenido
import SwiftUI import ARKit import RealityKit struct ContentView: View { @StateObject var vm = ViewModel() var body: some View { ZStack{ ARViewContainer() .edgesIgnoringSafeArea(.all) .environmentObject(vm) VStack{ Text(vm.sessionInfoLabel) .font(.title3) .foregroundColor(.red) Spacer() HStack{ Button{ } label: { Image(systemName: "person.2") .padding() .font(.title) } Spacer() Button{ } label: { Image(systemName: "target") .padding() .font(.title) } } .padding() } } } } struct ARViewContainer: UIViewRepresentable { @EnvironmentObject var vm: ViewModel func makeUIView(context: Context) -> ARView { return vm.arView } func updateUIView(_ uiView: ARView, context: Context) { } }Ver modelo
import SwiftUI import ARKit import RealityKit class ViewModel: ObservableObject { @Published var arView: ARView var sessionInfoLabel = "" init() { arView = ARView.init(frame: .zero) let config = ARWorldTrackingConfiguration() config.planeDetection = .horizontal arView.session.delegate = arView arView.session.run(config) } } extension ARView: ARSessionDelegate { public func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) { camera.trackingState.description = ViewModel().sessionInfoLabel } } extension ARCamera.TrackingState: CustomStringConvertible { public var description: String { switch self { case .normal: return "Normal" case .notAvailable: return "Not Available" case .limited(.initializing): return "Initializing" case .limited(.excessiveMotion): return "Excessive Motion" case .limited(.insufficientFeatures): return "Insufficient Features" case .limited(.relocalizing): return "Relocalizing" case .limited: return "Unspecified Reason" } } }