使用CoreText绘图时禁用混合

时间:2019-03-28 15:20:40

标签: ios swift core-text

我正在使用CoreText在灰色背景上绘制黑色文本。 似乎系统会自动在字形上进行一些混合,如果可能的话,我想禁用此行为,但是我不确定如何。

这是字母L顶部的放大屏幕截图。这是我要禁用的混合功能

enter image description here

绘图代码如下:

let para = NSMutableParagraphStyle()
    para.alignment = .center

    let attrString = NSAttributedString(string: Configuration.trainString,
                                        attributes:  [
                                            .font:UIFont.boldSystemFont(ofSize: size.height*0.8),
                                            .paragraphStyle:para
        ])

    let framesetter = CTFramesetterCreateWithAttributedString(attrString as CFAttributedString)

    let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length), path, nil)

    CTFrameDraw(frame, ctx)

    let cgImage = ctx.makeImage()

    return cgImage

有没有办法在仍然利用CoreText的情况下做到这一点?

编辑:可能this与之相关,但是我相信这个问题仍然有效。这个问题可以用代码明确回答,而以前没有提供任何代码。我已经在将制版机使用的路径四舍五入为整数(以及字体大小)

将在Swift游乐场中运行的代码的全部要点发布为HERE

1 个答案:

答案 0 :(得分:1)

这似乎很明显,但是值得重复一遍,CTFrameDraw(_:_:)最终只是在CGContext上执行操作,因此其文本功能必不可少。

根据您要的具体情况,我建议您以setAllowsFontSmoothing(_:)开始在CGContext上尝试字体平滑功能。

编辑

使用您的游乐场,我找到了一个特定的解决方案。在绘制文本之前添加setAllowsAntialiasing:

ctx.setAllowsAntialiasing(false)
CTFrameDraw(frame, ctx)