J'ai fait un CALayer
avec un ajout CATextLayer
et le texte est flou. Dans la documentation, ils parlent d'un "anticrénelage sous-pixel", mais cela ne veut pas dire grand chose pour moi. Quelqu'un a t-il un extrait de code qui fait un CATextLayer
avec un bout de texte qui est clair ?
Voici le texte de la documentation d'Apple :
Remarque : CATextLayer désactive l'anticrénelage sous-pixel lors du rendu du texte. Le texte ne peut être dessiné en utilisant l'anticrénelage sous-pixel que lorsqu'il est lorsqu'il est composé dans un arrière-plan opaque existant en même temps que le texte. qu'il est rastérisé. Il n'y a aucun moyen de dessiner du texte avec anticrénelage sous-pixel par lui-même, que ce soit dans une image ou dans un tableau. par lui-même, que ce soit dans une image ou un calque, séparément avant le avant de disposer des pixels d'arrière-plan dans lesquels tisser les pixels du texte. Le réglage de la propriété d'opacité du calque sur OUI ne change pas le mode de rendu. de rendu.
La deuxième phrase implique que l'on peut obtenir un texte de bonne qualité si l'on composites
dans un existing opaque background at the same time that it's rasterized.
C'est génial, mais comment le composer, comment lui donner un fond opaque et comment le rastériser ?
Le code qu'ils utilisent dans leur exemple de menu kiosque est le suivant : (C'est OS X, pas iOS, mais je suppose que cela fonctionne !)
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.
EDIT : Ajout du code que j'ai effectivement utilisé et qui a donné lieu à un texte flou. Il provient d'une question connexe que j'ai postée au sujet de l'ajout d'une balise UILabel
plutôt qu'un CATextLayer
mais en obtenant une boîte noire à la place. 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 : Voir ma réponse ci-dessous pour savoir comment cela a été résolu. sbg.
0 votes
Cela ne répondra pas à votre question, mais peut être pertinent pour quelqu'un comme moi qui cherche seulement à dessiner du texte attribué, d'une manière très similaire à l'utilisation de UILabel : stackoverflow.com/questions/3786528/