Swift Scenekit – 居中SCNText – getBoundingBoxMin:Max问题

使用SCNText上的alignmentMode选项。 一直googling,看起来像alignmentMode和containerFrame有问题。 我find的替代schemebuild议使用get bounding box函数来查找文本大小,然后手动调整。 伟大的除了我不能得到的function工作。 当我尝试获取这两个向量时,出现错误:

'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) } 

任何build议不胜感激。

好,我最终的代码解决scheme如下所示:

 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) } 

我留下了我的几个全局variables,但应该是有道理的。

感谢所有的帮助。

编辑:带外出指针参数的函数吸收Swift,所以在Swift 3苹果用一个属性的types是元组replace了这个方法(和相应的setter方法):

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

所以你可以写一些像:

 let (min, max) = textNode.boundingBox 

更普遍…

在Swift中UnsafeMutablePointertypes的out参数的UnsafeMutablePointer可以通过传入inout引用作为参数来调用。 所以对于这个方法的Swift 2版本,或者其他地方的类似方法:

 _textNode.getBoundingBoxMin(&v1, max: &v2)