Я пытаюсь интегрировать представление ARKit, которое обрабатывает фреймы с машинным обучением и показывает результаты на экране. Я получил представление ARKit для работы с UIViewRepresentable, и все работает, пока состояние не изменится. Как мне сделать AR view stati c и не обновлять при изменении состояния. Я только хочу обновить метку, которая показывает результат.
Это ошибка, которую я получаю при изменении состояния: [CAMetalLayer nextDrawable] returning nil because allocation failed.
Это, вероятно, происходит из-за того, что arView постоянно перезагружается при обработке кадров? Хотя не слишком уверен.
Это код для представления:
struct ARControlView: View {
@EnvironmentObject var resultHandler: ResultHandler
var body: some View {
let arView = ARViewContainer() // This is the UIViewRepresentable containing the ARKit view.
return ZStack {
arView
VStack {
Text(self.resultHandler.gesture.rawValue)
}
.onAppear {
arView.restartARSession()
}
.onDisappear {
arView.pauseArSession()
}
}
}
}
Это для ARViewContainer:
struct ARViewContainer: UIViewRepresentable {
var arView = ARView(frame: .zero)
@EnvironmentObject var resultHandler: ResultHandler
func makeUIView(context: Context) -> ARView {
arView.session.delegate = context.coordinator
arView.session.run(AROrientationTrackingConfiguration())
return arView
}
func pauseArSession() {
arView.session.pause()
}
func restartARSession() {
arView.session.run(AROrientationTrackingConfiguration())
}
func updateUIView(_ uiView: ARView, context: Context) {}
class Coordinator: NSObject, ARSessionDelegate {
// Process frames here...
}
func makeCoordinator() -> ARViewContainer.Coordinator {
Coordinator(self)
}
}