2012-02-16 21 views
5

Como han hecho otros, estoy tratando de obtener texto de aspecto decente en una vista con respaldo de CALayer. El hilo más relevante que he encontrado es Faking Subpixel Antialiasing on Text with Core Animation.Antialiasing de texto en CALayer con fondo opaco

Al comienzo de esa publicación, se indica que "Ahora, para las personas que pueden establecer fondos opacos para su texto (ya sea con una llamada setBackgroundColor: o la configuración equivalente en Interface Builder), este problema no presentan demasiado problema ". Sin embargo, cuando establezco el fondo de un cuadro de texto en IB, y hago que dibuje el fondo, y hago lo mismo con su celda, sigo teniendo el mismo problema (sin antialiasing cuando se usan capas). Estos pertenecen a un NSBox que también dibuja su fondo.

¿Alguna idea de lo que debería estar haciendo que no sea? Gracias

Respuesta

3

No estoy seguro de si esto ayuda a resolver su problema, pero cuando hace dibujo personalizado en una capa, tiene que usar CGContextFillRect() con un color opaco y luego dibujar la cadena encima de ese rect para obtener una antialización subpixel.

Configuración de layer.backgroundColor no es suficiente, probablemente porque layer.backgroundColor se puede cambiar sin volver a dibujar los contenidos de la capa.

+0

tienes un ejemplo de cómo se abre el arco de tal manera que no hace mal - mi intento no funcionó bien. – Sam

+0

@Sam asegúrese de establecer 'layer.contentsScale' en' [UIScreen mainScreen] .scale'. –

+0

Hermoso. Esto funcionó perfectamente. Había estado configurando layer.backgroundColor en un color completamente opaco, pero no estaba llenando ese color antes de dibujar el texto. Tan pronto como lo hice, el texto se procesó perfectamente. ¡Gracias! – Bryan

0

Si simplemente intenta obtener un texto nítido sobre un fondo opaco y golpear su cabeza contra la pared con CATextLayer - renuncie y use NSTextField con el recuadro desactivado y linefragmentpadding establecido en 0. El código de muestra es rápido pero debe ser capaz de traducir fácilmente ...

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) 

para mí pantallas de texto en el equivalente a:

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) 
Cuestiones relacionadas