Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在ARKit应用程序中显示SwiftUI视图_Ios_Swift_Swiftui_Scenekit_Arkit - Fatal编程技术网

Ios 在ARKit应用程序中显示SwiftUI视图

Ios 在ARKit应用程序中显示SwiftUI视图,ios,swift,swiftui,scenekit,arkit,Ios,Swift,Swiftui,Scenekit,Arkit,我有一个应用程序,我检测到一个图像,并在检测到的图像上方的平面上显示UI。 以前,我曾在SceneKit ARKit应用程序中成功地在飞机上显示UIViewController。我试图在检测到的图像上显示飞机上的快捷视图 这是我的密码 func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { // After detecting the image marker

我有一个应用程序,我检测到一个图像,并在检测到的图像上方的平面上显示UI。 以前,我曾在SceneKit ARKit应用程序中成功地在飞机上显示UIViewController。我试图在检测到的图像上显示飞机上的快捷视图

这是我的密码

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {

    // After detecting the image marker
    let node = SCNNode()

    guard let imageAnchor = anchor as? ARImageAnchor else { return nil }
    guard let imageName = imageAnchor.name else { return nil }
    let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width,
                         height: imageAnchor.referenceImage.physicalSize.height)

    let planeNode = SCNNode(geometry: plane)
    planeNode.eulerAngles.x = -.pi / 2
    arViewController = createARController(node: planeNode)
    node.addChildNode(planeNode)
    return node
}

func createARController(node: SCNNode) -> ARViewController {
    let arVC = UIStoryboard(name: "ARStoryboard", bundle: nil).instantiateInitialViewController() as! ARViewController

    DispatchQueue.main.async {

        arVC.planeNode = node
        arVC.willMove(toParent: self)
        self.addChild(arVC)
        arVC.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
        self.view.addSubview(arVC.view)

    }
    self.show(viewController: arVC, on: node)
    return arVC
}



 private func show(viewController: ARViewController, on node: SCNNode) {
    let material = SCNMaterial()

    material.diffuse.contents = viewController.view
    node.geometry?.materials = [material]
    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {

        // add child vc with swiftui view here.
        viewController.addARView()
    }

}


class ARViewController: UIViewController {

var planeNode: SCNNode?

@IBOutlet weak var containerView: UIView!
override func viewDidLoad() {
    super.viewDidLoad()

    print("ARViewController loaded")
    // Do any additional setup after loading the view.
}

func addARView() {
    let controller = UIHostingController(rootView: SwiftUIARView())
    self.addChild(controller)
    controller.view.frame = self.view.frame
    view.addSubview(controller.view)
    controller.didMove(toParent: self)
}

}
如果我在ARViewController上有一个UIKit按钮,我可以看到该按钮,但是当调用addARView()函数初始化UIHostingController时,我只看到渲染的黑色视图。实际视图永远不会被渲染。我做错什么了吗?还是现在不可能


有人有幸在ARKit SceneKit应用程序中呈现SwiftUI视图吗?

我忘了提到我有一个单独的故事板,其中ARViewController作为其初始视图控制器。我忘了提到我有一个单独的故事板,其中ARViewController作为其初始视图控制器。