2012-02-16 3 views
5

다른 사람들처럼, 나는 CALayer 뒷받침 된 뷰에서보기 좋게 보이는 텍스트를 얻으려고합니다. 내가 찾은 가장 관련있는 스레드는 Faking Subpixel Antialiasing on Text with Core Animation입니다.텍스트 불투명 한 배경을 가진 CALayer의 앤티 앨리어싱

게시물의 시작 부분에 "이제는 텍스트에 대해 불투명 한 배경을 설정할 수있는 사람들 (setBackgroundColor : 호출 또는 Interface Builder의 해당 설정)을 사용하는 경우이 문제는 문제가 너무 많아. " 그러나 IB에서 텍스트 상자의 배경을 설정하고 배경을 그려 셀에 동일한 작업을 수행 할 때도 동일한 문제가 발생합니다 (레이어를 사용할 때 앤티 앨리어싱이 적용되지 않음). 이것들은 배경을 그린 NSBox에 속합니다.

내가 무엇을해야하는지에 대한 아이디어가 있습니까? 감사합니다

답변

3

당신의 문제를 해결하는 데 도움이되는지 확신 할 수 없지만 레이어에서 사용자 지정 그리기를 수행 할 때는 불투명 한 색상의 CGContextFillRect()를 사용하고 해당 직사각형 상단에 문자열을 그려 서브 픽셀 안티 앨리어싱을 가져와야합니다.

layer.backgroundColor를 설정하면 레이어 내용을 다시 그릴 필요없이 layer.backgroundColor를 변경할 수 있기 때문에 충분하지 않습니다.

+0

당신은 당신이 제대로 렌더링하지 않도록 문자열을 그릴 것입니다 방법의 예를해야합니까 - 내 시도가 멋지게 렌더링되지 않았습니다. – Sam

+0

@Sam'layer.contentsScale'을'[UIScreen mainScreen] .scale'으로 설정했는지 확인하십시오. –

+0

아름다운. 이것은 완벽하게 작동했습니다. layer.backgroundColor를 완전히 불투명 한 색상으로 설정했지만 텍스트를 그리기 전에 해당 색상을 채우지 않았습니다. 최대한 빨리 텍스트가 완벽하게 렌더링되었습니다. 감사! – Bryan

0

단순히 불투명 한 배경에서 선명한 텍스트를 얻고 CATextLayer로 머리를 벽에 치려고하는 경우 - 인세 트가 비활성화되고 linefragmentpadding이 0으로 설정된 NSTextField를 포기하고 사용하십시오. 샘플 코드는 신속하지만 나를 위해

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) 
관련 문제