我正在尝试使用CoreText
绘制文本。我有以下代码:
guard let context = UIGraphicsGetCurrentContext() else { return }
let attrString = NSAttributedString(string: "Str")
let path = CGMutablePath()
// Commented code does work, why?
// path.addRect(CGRect(x: 0, y: 50, width: attrString.size().width + 1, height: attrString.size().height + 1))
path.addRect(CGRect(x: 0, y: 50, width: attrString.size().width, height: attrString.size().height))
let framesetter = CTFramesetterCreateWithAttributedString(attrString as CFAttributedString)
let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length), path, nil)
CTFrameDraw(frame, context)
为什么增加CGRect
的大小会有所帮助,而NSAttributedString
的实际大小却无济于事?
感谢您的帮助。
答案 0 :(得分:1)
使用属性字符串并获取其大小时,至少需要指定一种字体。例如,"Str"
的大小在8磅字体与72磅字体之间会大不相同。
将计算出的CGRect
转换为整数rect也会有帮助,该整数将舍入任何小数位数。使用integral
的{{1}}属性。