如何将文本居中在SkLabelNode中

时间:2016-12-03 04:39:38

标签: ios swift xcode sprite-kit sklabelnode

我不是指这个: Label.horizo​​ntalAlignmentMode = SKLabelNode Horizo​​ntalAlignmentModeCenter

或者 Label.verticalAlignmentMode =

1 个答案:

答案 0 :(得分:1)

SKLabelNodes是简单的,几乎不可编辑的文本到位图的非常原始的渲染,并在屏幕上抛出。它们并不是要解决大的设计问题......所以他们没有意识到他们的“框架”。

话虽如此......它们是SKNode的子类,它具有frame属性,但这与你如何看待设计应用程序或页面编写应用程序或其他任何内容的框架不同。 ..来自文档,就是这个节点:

  

框架是包含节点内容的最小矩形,   考虑节点的xScale,yScale和zRotation   属性。并非所有节点都包含自己的内容。

这可能很有用,因为它有一些方便的吸气剂。您可以获得widthheightmaxXmaxY以及minXminY以及midX和{{1}也是。

理论上,您可以使用这些来帮助您根据文本标签在场景中占据的框架的这些便利数量,将文本内容相对于其他内容居中。

但这不会很有趣。

相反,你可以创建一个与文本完全相同的虚拟midY,用SKSpriteNode填充它,这样就无法看到它并且在渲染术语中没有任何成本,然后添加您的文本节点为此虚拟SKColor.clear,作为它的子节点。

现在,您可以使用SKSpriteNode的原点(anchor point)作为指导,将文本节点定位在您喜欢的任何位置,每当您更改文本大小时,请使用willSet调整大小SKSpriteNode以匹配它。这样你的起源/锚点将始终按你的意愿工作。

这里有更聪明的想法可以提供更好的方法来做这类事情,但这是我习惯在3D设计应用程序中做的一种黑客,以使文本表现良好。