【发布时间】:2018-01-23 16:55:05
【问题描述】:
我正在尝试创建具有轮廓的文本。我目前正在使用带有 NSAttributedString 的 SKLabelNode,您现在可以在 iOS 11 的 SpriteKit 中执行此操作。问题是,如果笔划宽度太厚,那么轮廓会被 SKLabelNode 的边界矩形截断。图片和代码请看下面。
extension SKLabelNode {
func addStroke(_ strokeColor:UIColor) {
let font = UIFont(name: self.fontName!, size: self.fontSize)
let attributes:[NSAttributedStringKey:Any] = [.strokeColor: strokeColor, .strokeWidth: 20.0, .font: font!]
let attributedString = NSMutableAttributedString(string: " \(self.text!) ", attributes: attributes)
let label1 = SKLabelNode()
label1.horizontalAlignmentMode = self.horizontalAlignmentMode
label1.text = self.text
label1.zPosition = -1
label1.attributedText = attributedString
self.addChild(label1)
}
}
我查看了扩展 SKLabelNode 的框架作为边框文本,但这是一个仅限获取的属性。我尝试添加前导/尾随空格,但它们似乎被自动修剪。对 strokeWidth 使用负值可以,但会创建内部笔划,我更愿意使用外部笔划。
有什么想法吗?在此先感谢您的帮助! 迈克
【问题讨论】:
-
是否需要在标签节点内创建标签节点才能实现这一点?你是这样得到大纲的吗?看起来一个标签节点的大小限制了另一个标签节点的大小,这是问题吗?
-
感谢您的回复。大纲标签必须在文本标签后面才能获得这种效果。我曾尝试将其添加为单独的节点(不是文本标签的子节点),但结果相同。
-
好的,我打算建议使用 SKNode 作为 2 的“容器”,但如果您尝试过,那么我不确定。祝你好运!
-
这不是一个完整的框架。差远了。所以你得到了像 NSAttributedString 这样的东西,但还没有完成。在您浪费时间假设某些东西有效之前,没有任何测试或透明度可以让您知道这一点。苹果的傲慢。如果您需要具有视觉效果的动态类型,那您就很不走运了。如果您需要具有动态效果的动态类型,Sprite Kit 可能会在 2028 年推出。
标签: swift text sprite-kit border sklabelnode