在 CALayer 和 CATextLayer 中使用 Cocoa (OS X) 绘制的文本都是颗粒状的。必须使用什么方法才能使文本清晰明了?
我很高兴文本得到不透明背景的支持 - 我知道如果需要透明,问题会更加复杂。
我不能使用 NSView 派生实例(如 NSTextField)来表示我的解决方案中的文本 - 我正在使用 CALayer,因为它更轻量级。
编辑
我正在更新我根据以下评论尝试过的代码:
以下旨在成为自定义 CATextLayer 类,其中背景颜色在与它组合的文本之前被预设为不透明,以便可以进行亚像素抗锯齿:
class TextLayer: CATextLayer {
override func drawInContext(ctx: CGContext!) {
CGContextSaveGState(ctx)
CGContextSetRGBFillColor (ctx, 1, 1, 1, 1)
CGContextFillRect (ctx, self.bounds)
CGContextSetShouldSmoothFonts (ctx, true)
super.drawInContext(ctx)
CGContextSaveGState(ctx)
}
}
此自定义派生的 CATextLayer 然后在自定义 View 中使用,如下所示:
override func awakeFromNib() {
self.wantsLayer = true
var backingLayer = self.layer
var textLayer = TextLayer()
textLayer.string = "ABC"
textLayer.fontSize = 16
textLayer.foregroundColor = NSColor.blackColor().CGColor
textLayer.frame = NSMakeRect(0, 0, 80, 40)
backingLayer?.addSublayer(textLayer)
textLayer.setNeedsDisplay()
}
最终结果在我的视网膜 macBook Pro 上仍然是一张颗粒状的图片。
请您参考如下方法:
在 CALayer 上尝试一些属性产生了解决方案......
为了让上面的代码在视网膜 mac 上流畅地渲染字体并与其他字体保持一致,您似乎还需要设置:
textLayer.contentsScale = 2.0
在 NSView 子类中。
我的理解是,这会从更接近支持 Retina 的硬件的底层图像生成更详细的位图。
