gpt4 book ai didi

swift - 如何释放 RealityKit ARView()?

转载 作者:行者123 更新时间:2023-12-04 04:18:56 25 4
gpt4 key购买 nike

我无法发布我的 RealityKit ARView()从内存里。

我知道 ARKit + SceneKit 有(是?)类似的问题——有这样的解决方法:https://stackoverflow.com/a/53919730/7826293
不幸的是,这并没有解决我的问题。

上述解决方案通过手动删除所有“可疑”内容来工作。这正是我在更大范围内所做的:

class ViewController_ARViewMemoryTest: UIViewController {

var arView: ARView?

init() {
super.init(nibName: nil, bundle: nil)
arView = ARView(frame: .zero)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

deinit {
doEverythingThatsNeeded()
}

public func doEverythingThatsNeeded() {
self.arView?.session.pause()
self.arView?.session.delegate = nil
self.arView?.removeFromSuperview()
// Quite a few more removals and resets here, ie. for Combines AnyCancellables
self.arView = nil
}

}

我也从外部调用 doEverythingThatsNeeded() :
aRViewMemoryTest?.doEverythingThatsNeeded()
aRViewMemoryTest?.arView = nil
aRViewMemoryTest = nil

这个问题似乎与我在 SwiftUI 中包装了我的 ARView 或 UIViewController 的事实无关 UIViewRepresentable/ UIViewControllerRepresentable .

我相信这一定是一个错误,我几个月前已经提交了一份报告。但是,在 Apple 修复潜在问题之前,我希望有帮助的解决方法。

非常感谢!

最佳答案

如果您使用的是 SwiftUI,请尝试以下代码:

import SwiftUI
import RealityKit

struct ContentView : View {

var body: some View {
return ARViewContainer().edgesIgnoringSafeArea(.all)
}
}

struct ARViewContainer: UIViewRepresentable {

func updateUIView(_ uiView: ARView,
context: UIViewRepresentableContext<ARViewContainer>) {

uiView.removeFromSuperview()
}

func makeUIView(context: Context) -> ARView {

let arView = ARView(frame: .zero)
let boxAnchor = try! Experience.loadBox()
arView.scene.anchors.append(boxAnchor)
return arView
}
}

...如果您使用 UIKit,请使用以下代码:
import UIKit
import RealityKit

class ViewController: UIViewController {

var arView: ARView? = ARView(frame: .zero)

deinit {
removingView()
}

func addingView() {
self.arView?.frame = .init(x: 0, y: 0, width: 300, height: 700)
self.view.addSubview(arView!)
}

func removingView() {
self.arView?.session.pause()
self.arView?.session.delegate = nil
self.arView?.scene.anchors.removeAll()
self.arView?.removeFromSuperview()
self.arView?.window?.resignKey()
self.arView = nil
}

override func viewDidLoad() {
super.viewDidLoad()
addingView()

let boxAnchor = try! Experience.loadBox()
arView?.scene.anchors.append(boxAnchor)

removingView()
}
}

enter image description here

关于swift - 如何释放 RealityKit ARView()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59909045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com