无法在 NSAttributedString 中绘制圆角描边

问题描述 投票:0回答:1

我正在尝试使用 Swift 中的 NSMutableAttributedString 对文本应用圆角描边效果。我已经能够找到颜色、字体和下划线等文本属性的各种 NSMutableAttributedString.Key 选项,但我似乎找不到任何允许我对文本应用圆角描边的键。

let attributes: [NSMutableAttributedString.Key: Any] = [
    .font: font,
    .strokeWidth: borderWidthToDraw,
    .strokeColor: strokeColorToDraw,
]

为了更好的视觉支持,预期和当前输出为attached

ios swift nsattributedstring stroke
1个回答
0
投票

如果字体末端是圆角的,比如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)
    }
}

输出:

enter image description here

这看起来与问题中的图片不完全一样。如果您想要圆角笔画,但文本本身应该是非圆角的,我怀疑您可以单独使用 NSAttributedString

 来做到这一点。在最坏的情况下,您可能必须使用像 
CTFontCreatePathForGlyph
 这样的 CoreText 函数来获取字形的路径,并将 
lineJoin
 更改为 
round

© www.soinside.com 2019 - 2024. All rights reserved.