Ne ho fatta una CALayer
con aggiunta CATextLayer
e il testo risulta sfocato. Nei documenti si parla di "antialiasing sub-pixel", ma per me non significa molto. Qualcuno ha uno snippet di codice che fa un CATextLayer
con un po 'di testo che è chiaro?
Ecco il testo dalla documentazione di Apple:
Nota: CATextLayer disabilita l'antialias dei sub-pixel durante il rendering del testo. Il testo può essere disegnato utilizzando l'antialias sub-pixel solo quando viene composto in uno sfondo opaco esistente nello stesso momento in cui viene rasterizzato. Non c'è modo di disegnare da solo il testo con antialias dei subpixel, sia in un'immagine che in un livello, separatamente prima di avere i pixel di sfondo in cui intrecciare i pixel di testo. L'impostazione della proprietà di opacità del livello su SÌ non modifica la modalità di rendering.
La seconda frase implica che si può ottenere un bel testo se lo si composites
inserisce in existing opaque background at the same time that it's rasterized.
È fantastico, ma come lo compongo e come gli dai uno sfondo opaco e come lo rasterizzi?
Il codice che usano nel loro esempio di menu Kiosk è come tale: (È OS X, non iOS, ma presumo che funzioni!)
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
Grazie!
EDIT: l'aggiunta del codice che ho effettivamente usato ha prodotto un testo sfocato. È da una domanda correlata che ho postato sull'aggiunta UILabel
di una CATextLayer
scatola nera anziché su una scatola nera. 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: vedi la mia risposta qui sotto per come è stato risolto. sbg.