【问题标题】:How do you add an outline to text programmatically?如何以编程方式为文本添加大纲?
【发布时间】:2016-11-03 08:51:49
【问题描述】:

我有两个应用程序,一个带有 UILabel,另一个使用带有 SKLabelNode 的 SpriteKit。我想在白色文本周围添加黑色轮廓。

我在 swift 中找不到任何轮廓或边框属性或类似的东西。我已经尝试创建新标签,它们后面带有稍大的黑色字体,但看起来一点也不正确。

这是我的 SpriteKit 游戏

title.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
title.text = "Tap to start!"
title.fontName = "Arial"
title.zPosition = 10
title.fontSize = 50
self.addChild(title)

这是我的另一个使用 UILables 的(它位于红色矩形内,因此更容易看到)

let rectangle = UIView(frame:CGRect(x: self.view.frame.size.width / 2 - 150, y: self.view.frame.size.height / 2 - 75, width: 300, height: 150))
rectangle.backgroundColor = UIColor.red
self.view.addSubview(rectangle)

let label = UILabel(frame: CGRect(x: rectangle.frame.size.width / 2 - 75, y: rectangle.frame.size.height / 2 - 10, width: 150, height: 20))
label.textAlignment = .center
label.text = "Tap to Start!"
label.textColor = UIColor.white
label.font = UIFont(name: "Arial", size: 20)
rectangle.addSubview(label)

如何勾勒这些标签?

【问题讨论】:

  • 我不打算详细介绍,但请看这里。你将 UIFont 转换为 CGPath,然后在 SKShapeNode 上使用这个路径,最后设置描边给它一个边框
  • 您是要向 UILabel 或 SKLabelNodes 添加大纲吗?
  • @HylianGinyu 那么请把你的问题改得更清楚。我还为 SKLabelNodes 添加了答案
  • 原来为 UILabels 发布答案的人只是在文本周围放了一个框,这根本没有帮助,所以我仍然需要知道两者。
  • @HylianGinyu 我会把它变成一个关于SKLabelNodes 的问题,然后创建/查看另一个关于UILabels 的问题。现在你在问 2 个不同的问题(尽管它们可能看起来相似/相关)。 PS:我的回答对你有用吗?如果是,请注明。

标签: ios iphone swift sprite-kit swift3


【解决方案1】:

对于SKLabelNode,没有“简单”的方式来勾勒文本。然而,有一个“黑客”。它涉及在标签周围添加 8 个额外的重复节点,这些节点被着色为黑色(或您希望轮廓为任何颜色),zPosition 小于原始节点,否则相同。

每个标签的字体大小必须与原始标签相同。

您尝试这样做涉及增加 one 大纲副本标签的字体大小。正如你在问题中所说,它不起作用。您必须使用多个标签才能无缝显示效果。

您可以在原件正上方放置一份副本,在正下方放置一份,在左侧放置一份,在右侧放置一份,然后在每个角落放置一份(右上角、左上、右下和左下)。这给出了轮廓的效果,但是效率不高,应该持保留态度。

注意:保持所有副本与原始偏移量一致,因此“轮廓”大小均匀。

这也适用于UILabels,但我认为UILabels 可能有更简单的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2022-01-04
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多