Hice un CALayer
con un agregado CATextLayer
y el texto sale borroso. En los documentos, se habla de "suavizado de subpíxeles", pero eso no significa mucho para mí. ¿Alguien tiene un fragmento de código que haga una CATextLayer
con un poco de texto que sea claro?
Aquí está el texto de la documentación de Apple:
Nota: CATextLayer deshabilita el suavizado de subpíxeles al representar texto. El texto solo se puede dibujar usando suavizado de subpíxeles cuando se compone en un fondo opaco existente al mismo tiempo que se rasteriza. No hay forma de dibujar texto con suavizado de subpíxeles por sí mismo, ya sea en una imagen o una capa, por separado antes de tener los píxeles de fondo para entretejer los píxeles de texto. Establecer la propiedad de opacidad de la capa en SÍ no cambia el modo de renderizado.
La segunda oración implica que uno puede obtener un texto atractivo si uno composites
lo convierte en un existing opaque background at the same time that it's rasterized.
Eso es genial, pero ¿cómo lo compongo y cómo le da un fondo opaco y cómo lo rasteriza?
El código que usan en su ejemplo de un menú de quiosco 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];
menuItemLayer.font=@"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!
EDITAR: Agregar el código que realmente usé que resultó en texto borroso. Es de una pregunta relacionada que publiqué sobre agregar un en UILabel
lugar de un, CATextLayer
pero obtener una caja negra 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);
EDITAR 2: Vea mi respuesta a continuación para saber cómo se resolvió esto. sbg.