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
Swift 在SceneKit中,将文本标签放在SCNGeometry或SCNBox上_Swift_Scenekit - Fatal编程技术网

Swift 在SceneKit中,将文本标签放在SCNGeometry或SCNBox上

Swift 在SceneKit中,将文本标签放在SCNGeometry或SCNBox上,swift,scenekit,Swift,Scenekit,我试图在屏幕上移动时,将一个简单的文本标签放在一个(希望是所有类型的)内置的SCNGeometry形状上。我最接近成功的方法是通过.firstMaterial.diffuse.contents将带有CATextLayer的CALayer添加到SCNBox,如图所示 但是,文本永远不可读。对于高度为1.0的SCNBox:当layer.frame和textLayer.fontSize的大小为1.0时,文本不会显示;随着框架和字体大小的增加(而不是框),文本会出现斑点,如下图所示;当文本非常大时,会显

我试图在屏幕上移动时,将一个简单的文本标签放在一个(希望是所有类型的)内置的SCNGeometry形状上。我最接近成功的方法是通过.firstMaterial.diffuse.contents将带有CATextLayer的CALayer添加到SCNBox,如图所示

但是,文本永远不可读。对于高度为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)

正如David R.所指出的,盒子大小的单位与框架大小的单位不同

在将框架调整为(并优化SCNBox大小)后,它工作正常:


为什么图层大小是4乘4点?对我来说,它似乎太小,无法容纳清晰的文本。是的,但SCNBox的高度为1.0,长度为3,在屏幕上显示的大小很好;如果我把图层的尺寸调大,那么文本就会显示为难以辨认的长线条。框边和图层的尺寸是不可比较的。换句话说:盒子侧面的1个测量单位与用作纹理的层的1个测量单位的长度不同。谢谢David。所以我设置了一个更大的layer.frame height:50,它与layer.bounds.size.height的度量单位相同,fontSize的高度值稍微小一些,现在它开始工作了。如果你把“layer.frame=CGRect(x:0,y:0,宽度:200,高度:50)”作为答案,我会欣然接受。
layer.frame = CGRect(x: 0, y: 0, width: 200, height: 50)