为什么使用 CoreText 绘图需要增加 CGRect 的大小?
Why does drawing using CoreText require increasing the size of the CGRect?
我正在尝试使用 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
的实际大小却没有?
感谢任何帮助。
使用属性字符串并获取其大小时,您至少需要指定一种字体。例如,"Str"
的大小对于 8 号字体和 72 号字体会有很大不同。
它也可能有助于将计算的 CGRect
转换为整数矩形,它将对任何小数大小进行四舍五入。使用 integral
属性 of CGRect
.
我正在尝试使用 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
的实际大小却没有?
感谢任何帮助。
使用属性字符串并获取其大小时,您至少需要指定一种字体。例如,"Str"
的大小对于 8 号字体和 72 号字体会有很大不同。
它也可能有助于将计算的 CGRect
转换为整数矩形,它将对任何小数大小进行四舍五入。使用 integral
属性 of CGRect
.