2012-02-16 103 views
5

正如其他人所做的那樣,我試圖在CALayer支持的視圖上獲得體面的文字。我找到的最相關的線程是Faking Subpixel Antialiasing on Text with Core Animation帶有不透明背景的CALayer中的文字抗鋸齒

在這篇文章的開始部分,它指出:「現在,對於能夠爲其文本設置不透明背景的人(無論是使用setBackgroundColor:call還是Interface Builder中的等效設置),此問題不會提出了太多的問題。「但是,當我在IB中設置文本框的背景並讓它繪製背景並對其單元執行相同操作時,我仍然遇到同樣的問題(使用圖層時無反鋸齒)。這些屬於一個NSBox,也可以繪製它的背景。

任何想法,我應該做什麼,我不是?謝謝

回答

3

不知道這是否有助於解決您的問題,但是當您在圖層中進行自定義繪圖時,必須使用帶有不透明顏色的CGContextFillRect(),然後在該矩形的頂部繪製字符串以獲得子像素的抗滑動效果。

設置layer.backgroundColor不夠好,可能是因爲可以在不重繪圖層內容的情況下更改layer.backgroundColor。

+0

你有,你會如何繪製字符串,它不顯示效果不佳的例子 - 我的嘗試沒有很好地呈現。 – Sam 2015-02-12 16:43:56

+0

@Sam確保將'layer.contentsScale'設置爲'[UIScreen mainScreen] .scale'。 – 2015-02-14 01:54:58

+0

美麗。這工作完美。我一直將layer.backgroundColor設置爲完全不透明的顏色,但在繪製文本之前我沒有填充該顏色。一旦我做到了,文字就完美呈現了。謝謝! – Bryan 2016-03-18 04:52:10

0

如果您只是想在不透明的背景上看到清晰的文字並使用CATextLayer將您的頭靠在牆上 - 放棄並使用NSTextField,並將插入禁用並將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) 

對我顯示的文字相當於:

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)