我试图将一个简单的文本标签放在一个(希望是所有类型)的内置SCNGeometry形状中,当它们在屏幕上移动时。我最接近成功的是将带有CATextLayer的CALayer通过.firstMaterial.diffuse.contents添加到SCNBox,作为described in this thread。
但是,文字永远不可读。使用高度为1.0的SCNBox:当layer.frame和textLayer.fontSize的大小为1.0时,文本不会出现;随着框架和字体大小的增加(不是框)文本出现斑点,如下图所示;当它非常大时,文字显示为波浪线。
以下代码是生成形状的方法的一部分:
var geometry:SCNGeometry
let layer = CALayer()
layer.frame = CGRect(x: 0, y: 0, width: 4, height: 4)
layer.backgroundColor = UIColor.white.cgColor
var textLayer = CATextLayer()
textLayer.frame = layer.bounds
textLayer.fontSize = layer.bounds.size.height
textLayer.string = "Matilda"
textLayer.alignmentMode = kCAAlignmentLeft
textLayer.foregroundColor = UIColor.black.cgColor
textLayer.display()
layer.addSublayer(textLayer)
let geometry = SCNBox(width: 1.0,
height: 1.0,
length: 3.0,
chamferRadius: 0.0)
geometry.firstMaterial?.locksAmbientWithDiffuse = true
geometry.firstMaterial?.diffuse.contents = layer
let geometryNode = SCNNode(geometry: geometry)
geometryNode.position = SCNVector3(x: 0.0, y: 0.0, z: 0.0)
scnScene.rootNode.addChildNode(geometryNode)
答案 0 :(得分:2)
正如David R.所指出的,盒子大小的单位与帧大小的单位不同。
将帧调整为(并优化SCNBox大小)后,它有效:
layer.frame = CGRect(x: 0, y: 0, width: 200, height: 50)