如何将 SkLabelNode 中的文本居中
How to center the text inside the SkLabelNode
我不是这个意思:
Label.horizontalAlignmentMode = SKLabelNode HorizontalAlignmentModeCenter
或者
Label.verticalAlignmentMode =
SKLabelNodes
是简单的、几乎不可编辑的文本到位图的非常原始的渲染,并在屏幕上显示出来。他们不是为了解决大的设计问题....所以他们对他们的 "frame".
没有任何意识
话虽如此...它们是 SKNode
的子类,后者具有 frame
属性,但这与您对设计应用程序或页面中的框架的看法不同编写应用程序或其他任何东西......从文档中,它是一个节点:
The frame is the smallest rectangle that contains the node’s content,
taking into account the node’s xScale, yScale, and zRotation
properties. Not all nodes contain content of their own.
这很有用,因为它有一些方便的吸气剂。您可以获得 width
、height
、maxX
和 maxY
以及 minX
和 minY
以及 midX
和 midY
,也是。
因此,从理论上讲,您可以根据文本标签在场景中占据的帧的这些便利编号,使用它们来帮助您将文本内容相对于其他内容居中。
但那不会很有趣。
相反,您可以创建一个与文本尺寸完全相同的虚拟 SKSpriteNode
,用 SKColor.clear
填充它,这样它就不会被看到并且在渲染方面不会花费您任何费用,并且然后将您的文本节点添加到这个虚拟 SKSpriteNode
,作为它的子节点。
现在您有了 SKSpriteNode
的原点 (anchor point) 可用作将文本节点定位到您喜欢的任何位置的指南,并且每当您更改文本的大小时,使用 willSet 到调整 SKSpriteNode
的大小以匹配它。这样您的 origin/anchor 将始终如您所愿地工作。
这里有更聪明的头脑,可以想出更好的方法来做这类事情,但这是我在 3D 设计应用程序中习惯使用的让文本表现良好的技巧。
我不是这个意思: Label.horizontalAlignmentMode = SKLabelNode HorizontalAlignmentModeCenter
或者 Label.verticalAlignmentMode =
SKLabelNodes
是简单的、几乎不可编辑的文本到位图的非常原始的渲染,并在屏幕上显示出来。他们不是为了解决大的设计问题....所以他们对他们的 "frame".
话虽如此...它们是 SKNode
的子类,后者具有 frame
属性,但这与您对设计应用程序或页面中的框架的看法不同编写应用程序或其他任何东西......从文档中,它是一个节点:
The frame is the smallest rectangle that contains the node’s content, taking into account the node’s xScale, yScale, and zRotation properties. Not all nodes contain content of their own.
这很有用,因为它有一些方便的吸气剂。您可以获得 width
、height
、maxX
和 maxY
以及 minX
和 minY
以及 midX
和 midY
,也是。
因此,从理论上讲,您可以根据文本标签在场景中占据的帧的这些便利编号,使用它们来帮助您将文本内容相对于其他内容居中。
但那不会很有趣。
相反,您可以创建一个与文本尺寸完全相同的虚拟 SKSpriteNode
,用 SKColor.clear
填充它,这样它就不会被看到并且在渲染方面不会花费您任何费用,并且然后将您的文本节点添加到这个虚拟 SKSpriteNode
,作为它的子节点。
现在您有了 SKSpriteNode
的原点 (anchor point) 可用作将文本节点定位到您喜欢的任何位置的指南,并且每当您更改文本的大小时,使用 willSet 到调整 SKSpriteNode
的大小以匹配它。这样您的 origin/anchor 将始终如您所愿地工作。
这里有更聪明的头脑,可以想出更好的方法来做这类事情,但这是我在 3D 设计应用程序中习惯使用的让文本表现良好的技巧。