He hecho un CALayer
con un CATextLayer
añadido y el texto sale borroso. En los documentos, hablan de "antialiasing subpíxel", pero eso no significa mucho para mí. ¿Alguien tiene un fragmento de código que hace un CATextLayer
con un poco de texto claro?Cómo obtener texto en un CATextLayer para ser claro
Aquí está el texto de la documentación de Apple:
Nota: CATextLayer desactiva suavizado de subpíxeles al representar texto. El texto solo se puede dibujar utilizando antialiasing subpíxel cuando está compuesto en un fondo opaco existente al mismo tiempo que está rasterizado. No hay forma de dibujar texto antialias de subpixel por en sí mismo, ya sea en una imagen o en una capa, por separado antes de teniendo los píxeles de fondo para entrelazar los píxeles de texto. Estableciendo la propiedad de opacidad de la capa a YES no cambia el modo de representación .
La segunda frase implica que uno puede conseguir buen texto mirando si uno composites
en un existing opaque background at the same time that it's rasterized.
eso es genial, pero ¿cómo puedo compuesta y cómo le das un fondo opaco y cómo se rasterizar?
El código que utilizan en su ejemplo de un menú Kiosk es como tal: (Es OS X, no IOS, pero supongo que funciona!)
NSInteger i;
for (i=0;i<[names count];i++) {
CATextLayer *menuItemLayer=[CATextLayer layer];
menuItemLayer.string=[self.names objectAtIndex:i];
[email protected]"Lucida-Grande";
menuItemLayer.fontSize=fontSize;
menuItemLayer.foregroundColor=whiteColor;
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMaxY
relativeTo:@"superlayer"
attribute:kCAConstraintMaxY
offset:-(i*height+spacing+initialOffset)]];
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMidX
relativeTo:@"superlayer"
attribute:kCAConstraintMidX]];
[self.menuLayer addSublayer:menuItemLayer];
} // end of for loop
Gracias!
EDIT: Adición del código que realmente he usado que resultó en el texto borroso. Es de una pregunta relacionada que publiqué sobre cómo agregar un UILabel
en lugar de un CATextLayer
pero obteniendo un cuadro negro en su lugar. http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box
CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, 1.0, 1.0};
CGColorRef almostWhite = CGColorCreate(space,components1);
CGFloat components2[4] = {0.0, 0.0, 0.0, 1.0};
CGColorRef almostBlack = CGColorCreate(space,components2);
CGColorSpaceRelease(space);
upperOperator.string = [NSString stringWithFormat:@"13"];
upperOperator.bounds = CGRectMake(0, 0, 100, 50);
upperOperator.foregroundColor = almostBlack;
upperOperator.backgroundColor = almostWhite;
upperOperator.position = CGPointMake(50.0, 25.0);
upperOperator.font = @"Helvetica-Bold";
upperOperator.fontSize = 48.0f;
upperOperator.borderColor = [UIColor redColor].CGColor;
upperOperator.borderWidth = 1;
upperOperator.alignmentMode = kCAAlignmentCenter;
[card addSublayer:upperOperator];
[upperOperator release];
CGColorRelease(almostWhite);
CGColorRelease(almostBlack);
EDIT 2: Véase mi respuesta a continuación cómo esta se resolvió. sbg.
esto no responde a su pregunta, pero puede ser relevante para alguien como yo que sólo está buscando para dibujar atribuido texto, de una manera muy similar al uso de UILabel: http://stackoverflow.com/questions/3786528/iphone-ipad-how-exactly-use-nsattributedstrin g – DenNukem