如何从ARScene线程访问UITextView?

时间:2018-01-31 04:18:50

标签: swift multithreading uiview xcode9 arkit

我在UITextView检测到发言权时试图隐藏ARScene。代码如下:

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的新手。

1 个答案:

答案 0 :(得分:1)

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

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