6

SCNTextのalignmentModeオプションを楽しんでください。グーグルで調べてみると、alignmentMode と containerFrame に問題があるようです。私が見つけた代替手段は、バウンディングボックスの取得機能を使用してテキストサイズを見つけ、それに応じて手動で調整することを提案しています。私が機能を働かせることができないことを除いて素晴らしい。2 つのベクトルを取得しようとすると、エラーが発生します。

「SCNVector3」は「UnsafeMutablePointer < SCNVector3>」に変換できません

ジオメトリとノードの両方でそれを取得します。コードの例は以下です

func setCounterValue(counterValue:Int) {

    var v1 = SCNVector3(x: 0,y: 0,z: 0)
    var v2 = SCNVector3(x: 0,y: 0,z: 0)


    _counterValue = counterValue

    let newText = SCNText(string: String(format: "%06d", counterValue), extrusionDepth:sDepth)
    newText.font = UIFont (name: "Arial", size: 3)
    newText.firstMaterial!.diffuse.contents = UIColor.whiteColor()
    newText.firstMaterial!.specular.contents = UIColor.whiteColor()

    newText.getBoundingBoxMin(v1, max: v2)

    _textNode = SCNNode(geometry: newText)
    _textNode.getBoundingBoxMin(v1, max: v2)

}

どんな提案でも大歓迎です。

4

3 に答える 3

12

わかりましたので、最終的なコード ソリューションは次のようになります。

func setCounterValue(counterValue:Int) {

    var v1 = SCNVector3(x: 0,y: 0,z: 0)
    var v2 = SCNVector3(x: 0,y: 0,z: 0)

    _textNode.removeFromParentNode()
    _counterValue = counterValue

    let newText = SCNText(string: String(format: "%08d", counterValue), extrusionDepth:sDepth)
    newText.font = UIFont (name: "Arial", size: 3)
    newText.firstMaterial!.diffuse.contents = UIColor.whiteColor()
    newText.firstMaterial!.specular.contents = UIColor.whiteColor()

    _textNode = SCNNode(geometry: newText)
    _textNode.getBoundingBoxMin(&v1, max: &v2)

    let dx:Float = Float(v1.x - v2.x)/2.0
    let dy:Float = Float(v1.y - v2.y)
    _textNode.position = SCNVector3Make(dx, dy, Float(sDepth/2))

    node.addChildNode(_textNode)

}

いくつかのグローバル変数を残しましたが、意味があるはずです。

助けてくれてありがとう。

于 2014-12-21T22:13:14.433 に答える
11

編集: out-pointer 引数を持つ関数は Swift を吸い込むため、Swift 3 では、Apple はこのメソッド (および対応するセッター メソッド)をタイプが tuple であるプロパティに置き換えました。

var boundingBox: (min: SCNVector3, max: SCNVector3) { get set }

したがって、次のように書くことができます:

let (min, max) = textNode.boundingBox

より一般的に...

Swiftで型の out-parameter を取る関数はUnsafeMutablePointer、参照をパラメーターとして渡すことで呼び出すことができinoutます。したがって、このメソッドの Swift 2 バージョン、または他の同様のメソッドの場合:

_textNode.getBoundingBoxMin(&v1, max: &v2)
于 2014-12-21T16:14:06.687 に答える