如何从 ARScene 线程访问 UITextView?

How can I access to UITextView from an ARScene thread?

我试图在 ARScene 中检测到地板时隐藏 UITextView。代码如下:

class ViewController: UIViewController, ARSCNViewDelegate {

    ...

    @IBOutlet var sceneView: ARSCNView!
    @IBOutlet weak var myTextView: UITextView!

    // runs on floor detection
    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

        if anchor is ARPlaneAnchor {
            myTextView.isHidden = true // Error from Main Thread Checker 
        }
    }

    ...
}

但是,它不会隐藏 myTextView,但会产生错误提示 UIView.hidden 必须仅从主线程使用 。我想知道正确的方法是什么。我是 Swift.

的新手

那是因为 renderer 运行s 在后台线程中。您需要在主线程中 运行 所有与 ui 相关的代码。

DispatchQueue.main.async {
    myTextView.isHidden = true
}