Como obter texto em um CATextLayer para ficar claro
Eu fiz umCALayer
com uma adiçãoCATextLayer
e o texto sai embaçado. Nos documentos, eles falam sobre "antialiasing de sub-pixel", mas isso não significa muito para mim. Alguém tem um trecho de código que cria umCATextLayer
com um pouco de texto claro?
Aqui está o texto da documentação da Apple:
Nota: CATextLayer desabilita o antialiasing de sub-pixel ao renderizar texto. O texto só pode ser desenhado usando antialiasing de sub-pixel quando é composto em um plano de fundo opaco existente ao mesmo tempo em que é rasterizado. Não há como desenhar texto com suavização de subpixels por si só, seja em uma imagem ou em uma camada, separadamente antes de ter os pixels de fundo para tecer os pixels de texto. Definir a propriedade de opacidade da camada como YES não altera o modo de renderização.
A segunda frase implica que se pode obter um texto bonito se houvercomposites
em umexisting opaque background at the same time that it's rasterized.
Isso é ótimo, mas como eu o componho e como você fornece um fundo opaco e como você o rasteriza?
O código que eles usam no exemplo de um menu Kiosk é 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!
Edição: Adicionando o código que eu realmente usei que resultou em texto embaçado. É de uma pergunta relacionada que publiquei sobre como adicionar umUILabel
ao invés de umCATextLayer
mas obtendo 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);
EDIÇÃO 2: Veja minha resposta abaixo para saber como isso foi resolvido. sbg.