如何在ARkit场景iOS中添加具有文本的2dView

Dev*_*per 10 ios scenekit swift arkit

如何在ARkit场景iOS中添加具有文本的2dView.如何在节点顶部添加该视图,在旋转节点时不会旋转.在此输入图像描述

jls*_*ert 18

您可以添加SCNPlane并使用a SCNLookAtConstraint,以便飞机始终查看相机.

您可以创建自定义材质并将其材质属性设置为:

  • 颜色(UIColor或CGColor),指定材质表面的恒定颜色数字(

  • 图像(UIImage或CGImage),指定要在材质表面上映射的纹理

  • 核心动画层(CALayer)
  • 纹理(SKTexture,MDLTexture,MTLTexture或GLKTextureInfo)
  • SpriteKit场景(SKScene)

您还可以使用CoreAnimation或SpriteKit显示动画内容

SceneKit无法使用已在其他位置显示的图层(例如,UIView对象的背衬层)


以下是使用SpriteKit的示例:

  1. 创建您的SpriteKit场景:

例如:

let skScene = SKScene(size: CGSize(width: 200, height: 200))
skScene.backgroundColor = UIColor.clear

let rectangle = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 200, height: 200), cornerRadius: 10)
rectangle.fillColor = #colorLiteral(red: 0.807843148708344, green: 0.0274509806185961, blue: 0.333333343267441, alpha: 1.0)
rectangle.strokeColor = #colorLiteral(red: 0.439215689897537, green: 0.0117647061124444, blue: 0.192156866192818, alpha: 1.0)
rectangle.lineWidth = 5
rectangle.alpha = 0.4
let labelNode = SKLabelNode(text: "Hello World")
labelNode.fontSize = 20
labelNode.fontName = "San Fransisco"
labelNode.position = CGPoint(x:100,y:100)
skScene.addChild(rectangle)
skScene.addChild(labelNode)
Run Code Online (Sandbox Code Playgroud)
  1. 创建平面并将场景设置为材质属性

例如

let plane = SCNPlane(width: 20, height: 20)
let material = SCNMaterial()
material.isDoubleSided = true
material.diffuse.contents = skScene
plane.materials = [material]
let node = SCNNode(geometry: plane)
scene.rootNode.addChildNode(node)
Run Code Online (Sandbox Code Playgroud)
  1. 为场景添加动画效果

例如

labelNode.run(SKAction.repeatForever(SKAction.rotate(byAngle: .pi, duration: 2)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 如果您停止旋转操作,您的文字将以*颠倒*显示.要解决它,您需要在步骤2中添加`material.diffuse.contentsTransform = SCNMatrix4Translate(SCNMatrix4MakeScale(1,-1,1),0,1,0)`. (3认同)
  • 谢谢你!我在没有动画的情况下将它实现到我的AR测试用例中.当我运行它时,SKLabelNode的文本被镜像.你有什么线索的原因吗?在这里你可以得到我试图描述的印象; https://imgur.com/a/RwZn4 (2认同)