【问题标题】:In SceneKit, putting a text label onto SCNGeometry or SCNBox在 SceneKit 中,将文本标签放在 SCNGeometry 或 SCNBox 上
【发布时间】:2018-05-07 15:40:08
【问题描述】:

我正在尝试将一个简单的文本标签放在一个(希望是所有类型的)内置 SCNGeometry 形状上,因为它们在屏幕上移动。我最接近成功的是通过 .firstMaterial.diffuse.contents 将带有 CATextLayer 的 CALayer 添加到 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)

【问题讨论】:

  • 为什么图层大小是 4 x 4 点?这对我来说似乎太小而无法包含清晰的文字。
  • 是的,但是 SCNBox 的高度为 1.0,长度为 3,并且在屏幕上显示为合适的尺寸;如果我使图层大小变大,则文本会显示为难以辨认的长线
  • 盒子边和层的尺寸没有可比性。换句话说:盒子侧面的 1 个度量单位与用作纹理的层的 1 个度量单位的长度不同。
  • 谢谢大卫。所以我设置了一个更大的 layer.frame 高度:50,它看起来与 layer.bounds.size.height 的度量单位相同,并且为 fontSize 设置了一个稍微小的高度值,现在它可以工作了。如果你把“layer.frame = CGRect(x: 0, y: 0, width: 200, height: 50)”作为答案,我很乐意接受。

标签: swift scenekit


【解决方案1】:

正如 David R. 所指出的,框尺寸的单位与帧尺寸的单位不同。

将框架调整为(并优化 SCNBox 大小)后它起作用了:

layer.frame = CGRect(x: 0, y: 0, width: 200, height: 50)

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 1970-01-01
    • 2014-10-24
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多