Fiz um CALayer
com um adicionado CATextLayer
e o texto sai borrado. Nos documentos, eles falam sobre "suavização de subpixel", mas isso não significa muito para mim. Alguém tem um trecho de código que faz um CATextLayer
com um trecho de texto claro?
Aqui está o texto da documentação da Apple:
Nota: CATextLayer desativa suavização de subpixel ao renderizar texto. O texto só pode ser desenhado usando suavização de subpixel quando é composto em um fundo opaco existente ao mesmo tempo em que é rasterizado. Não há como desenhar o texto suavizado de subpixel por si só, seja em uma imagem ou uma camada, separadamente antes de ter os pixels de fundo para tecer os pixels de texto. Definir a propriedade opacidade da camada como SIM não altera o modo de renderização.
A segunda frase implica que é possível obter um texto com boa aparência se convertê- composites
lo em um existing opaque background at the same time that it's rasterized.
Isso é ótimo, mas como faço para compô-lo e como dar a ele um fundo opaco e como rasterizá-lo?
O código que eles usam em seu exemplo de menu de quiosque é o seguinte: (É OS X, não iOS, mas presumo que funcione!)
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
Obrigado!
EDIT: Adicionando o código que eu realmente usei que resultou em texto borrado. É de uma questão relacionada que postei sobre adicionar um em UILabel
vez de um, CATextLayer
mas obter uma caixa preta. 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: Veja minha resposta abaixo para saber como isso foi resolvido. sbg.