Objective c 具有不透明背景的CALayer中的文本抗锯齿

Objective c 具有不透明背景的CALayer中的文本抗锯齿,objective-c,macos,core-animation,Objective C,Macos,Core Animation,正如其他人所做的那样,我正试图在CALayer支持的视图上获得外观良好的文本。我找到的最相关的线索是 在那篇文章的开头,它说“现在,对于能够为文本设置不透明背景的人(使用setBackgroundColor:call或Interface Builder中的等效设置),这个问题不存在太多问题。”然而,当我在IB中设置文本框的背景并让它绘制背景时,对它的单元格做同样的处理,我仍然遇到同样的问题(使用图层时没有抗锯齿)。这些属于同样绘制背景的NSBox 你知道我应该做什么吗?我不知道?谢谢不确定这是否

正如其他人所做的那样,我正试图在CALayer支持的视图上获得外观良好的文本。我找到的最相关的线索是

在那篇文章的开头,它说“现在,对于能够为文本设置不透明背景的人(使用setBackgroundColor:call或Interface Builder中的等效设置),这个问题不存在太多问题。”然而,当我在IB中设置文本框的背景并让它绘制背景时,对它的单元格做同样的处理,我仍然遇到同样的问题(使用图层时没有抗锯齿)。这些属于同样绘制背景的NSBox


你知道我应该做什么吗?我不知道?谢谢

不确定这是否有助于解决您的问题,但当您在图层中进行自定义绘制时,必须使用带有不透明颜色的CGContextFillRect(),然后在该矩形上绘制字符串以获得子像素反序列化


设置layer.backgroundColor不够好,可能是因为layer.backgroundColor可以在不重新绘制图层内容的情况下进行更改。

如果您只是想在不透明背景上获得外观锐利的文本,并用CATextLayer将头部撞到墙上,请放弃并使用NSTextField,禁用inset并将linefragmentpadding设置为0。示例代码很快,但您应该能够轻松翻译

var testV = NSTextView()
testV.backgroundColor = NSColor(calibratedRed: 0.73, green: 0.84, blue: 0.89, alpha: 1)
testV.frame = CGRectMake(120.0, 100.0, 200.0, 30.0)
testV.string = "Hello World!"
testV.textContainerInset = NSZeroSize
testV.textContainer!.lineFragmentPadding = 0
self.addSubview(testV)
for me显示的文本相当于:

var testL = CATextLayer()
testL.backgroundColor = NSColor(calibratedRed: 0.73, green: 0.84, blue: 0.89, alpha: 1).CGColor
testL.bounds = CGRectMake(0.0, 0.0, 200.0, 30.0)
testL.position = CGPointMake(100.0, 100.0)
testL.string = "Hello World!"
testL.fontSize = 14
testL.foregroundColor = NSColor.blackColor().CGColor
self.layer!.addSublayer(testL)

您是否有一个示例,说明如何绘制字符串以使其不会渲染不良-我的尝试渲染不好。@Sam请确保将
层.contentsCale
设置为
[UIScreen mainScreen].scale
.Beauty。这很有效。我已经将layer.backgroundColor设置为完全不透明的颜色,但在绘制文本之前我没有填充该颜色。我一看,文本就呈现得非常完美。谢谢