【问题标题】:How to add textview inside a node of sceneVIew in ARkit ios如何在 ARkit ios 中的 sceneVIew 节点内添加 textview
【发布时间】:2020-08-04 11:58:15
【问题描述】:
我是 AR 开发的新手,目前正在使用 AR 功能处理一个基于视频通话的应用程序,因此需要在场景视图的节点中添加 UITextview
我已尝试使用以下代码:
let scanInfo = UITextView(frame:CGRect(x: location.x, y: location.y, width: 100, height: 80))
scanInfo.textAlignment = .left
scanInfo.textColor = UIColor.white
scanInfo.text = "SCAN A SURFACE"
sceneView.addSubview(scanInfo)
如果有人对此有一些想法,请告诉我
【问题讨论】:
标签:
ios
swift
augmented-reality
swift5
scntext
【解决方案1】:
大家好,我已经解决了我自己的问题希望这会有所帮助。
添加一个平面节点并在其中添加SCNtext作为平面节点的子节点
sceneView.automaticallyUpdatesLighting = true
sceneView.autoenablesDefaultLighting = true
guard let anchor = self.makeAnchor(at: location) else {return}
let plane = SCNPlane(width: 50, height: 50)
plane.materials.first?.diffuse.contents = UIColor.gray
let planeNode = SCNNode(geometry: plane)
planeNode.scale = SCNVector3(0.0015, 0.0015, 0.0015)
planeNode.position = SCNVector3(anchor.transform.columns.3.x ,anchor.transform.columns.3.y,anchor.transform.columns.3.z)
let yawn = sceneView.session.currentFrame?.camera.eulerAngles.y
planeNode.eulerAngles.y = (yawn ?? 0) + .pi * 2
planeNode.eulerAngles.x =(sceneView.session.currentFrame?.camera.eulerAngles.x ?? 0)
lastnode = planeNode
sceneView.scene.rootNode.addChildNode(planeNode)
let text = SCNText(string: textSrting, extrusionDepth: 1)
let material = SCNMaterial()
material.diffuse.contents = UIColor.white
material.multiply.intensity = 0.8
material.specular.contents = UIColor.red
material.isDoubleSided = true
material.locksAmbientWithDiffuse = true
let (min, max) = lastnode!.boundingBox
let width = CGFloat(max.x - min.x)
let height = CGFloat(max.y - min.y)
text.containerFrame = CGRect(x: CGFloat(min.x + 2), y: CGFloat(min.y - 2), width: (width - 3) , height: (height + 2))
text.truncationMode = CATextLayerTruncationMode.middle.rawValue
text.isWrapped = true
text.alignmentMode = CATextLayerAlignmentMode.left.rawValue
text.truncationMode = CATextLayerTruncationMode.middle.rawValue
text.font = UIFont(name: "Proxima-nova", size: 3)
text.materials = [material]
let textNode = SCNNode(geometry: text)
lastnode?.addChildNode(textNode)