我正在尝试使用 Swift 中的 NSMutableAttributedString 对文本应用圆角描边效果。我已经能够找到颜色、字体和下划线等文本属性的各种 NSMutableAttributedString.Key 选项,但我似乎找不到任何允许我对文本应用圆角描边的键。
let attributes: [NSMutableAttributedString.Key: Any] = [
.font: font,
.strokeWidth: borderWidthToDraw,
.strokeColor: strokeColorToDraw,
]
如果字体末端是圆角的,比如SF Rounded,则笔画边框会是圆角的。
这里我使用 SF Rounded 字体在
NSAttributedString
中显示了 UITextView
。
class MyViewController: UIViewController {
@IBOutlet var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
let attrString = NSAttributedString(string: "TIC-TAC-TOE", attributes: [
.font: UIFont.systemFont(ofSize: 50, weight: .bold).rounded(),
.strokeWidth: 5,
.strokeColor: UIColor.red,
])
textView.attributedText = attrString
}
}
// From https://stackoverflow.com/a/67305343/5133585
extension UIFont {
func rounded() -> UIFont {
guard let descriptor = fontDescriptor.withDesign(.rounded) else {
return self
}
return UIFont(descriptor: descriptor, size: pointSize)
}
}
输出:
这看起来与问题中的图片不完全一样。如果您想要圆角笔画,但文本本身应该是非圆角的,我怀疑您可以单独使用 NSAttributedString
来做到这一点。在最坏的情况下,您可能必须使用像
CTFontCreatePathForGlyph
这样的 CoreText 函数来获取字形的路径,并将
lineJoin
更改为
round
。