防止SCNText的枢轴点移动到其左对齐角

时间:2019-12-24 05:42:03

标签: ios swift scnnode arscnview scntext

我需要从最初设置它的sceneView中的位置旋转一个SCNText对象。创建SCNText时,请调整其枢轴点,使其在其中心旋转。问题是在我将其中心移至leftAlignment Point之后。我用红点创建了点

enter image description here

没有下面的代码,它就不能正确旋转(从leftAlignment点开始),如图1所示。有了这个代码,它确实可以正确旋转,但是如图2所示,它的原始位置现在是错误的。

let min = textNode.boundingBox.min
let max = textNode.boundingBox.max
textNode.pivot = SCNMatrix4MakeTranslation(
    min.x + (max.x - min.x)/2,
    min.y + (max.y - min.y)/2,
    min.z + (max.z - min.z)/2
)

我正在寻找第三张照片。 我该如何实现?

代码:

let squareNode = SCNNode()
squareNode ...
squareNode.position = SCNVector3(0.0, 0.6, -0.7)

let material = SCNMaterial()
material.diffuse.contents = UIColor.yellow

let geometry = SCNText(string: "SCNText", extrusionDepth: 0.1)
geometry.flatness = 0
geometry.font = UIFont.systemFont(ofSize: 6.3)
geometry.materials = [material]

let textNode = SCNNode()
textNode.geometry = geometry
textNode.geometry?.firstMaterial?.isDoubleSided = true

// *** code to use its center ***
let min = textNode.boundingBox.min
let max = textNode.boundingBox.max
textNode.pivot = SCNMatrix4MakeTranslation(
    min.x + (max.x - min.x)/2,
    min.y + (max.y - min.y)/2,
    min.z + (max.z - min.z)/2
)

textNode.position = SCNVector3(0.1, 0.55, -0.7)
sceneView.scene.rootNode.addChildNode(textNode)

我还尝试在首次创建textNode时不添加“使用其中心的代码”,而是在respondToSwipeGesture内部旋转时添加了代码,但是一旦旋转完成,它就结束了/将自己移动到如图2所示的同一leftAlignment角。

func respondToSwipeGesture(recognizer: UIGestureRecognizer) {

    case UISwipeGestureRecognizer.Direction.right:

    // ...

    let node = hitResults.first.node

    let rotate = SCNAction.rotateBy(x: 0, y: CGFloat(degToRadians(degrees: -68.5)), z: 0, duration: 0.33)

    let min = node.boundingBox.min
    let max = node.boundingBox.max
    node.pivot = SCNMatrix4MakeTranslation(
        min.x + (max.x - min.x)/2,
        min.y + (max.y - min.y)/2,
        min.z + (max.z - min.z)/2
    )

    node.runAction(rotate)
}

0 个答案:

没有答案