J'ai fait un CALayer
avec un ajouté CATextLayer
et le texte est flou. Dans la documentation, ils parlent d '"anticrénelage sous-pixel", mais cela ne signifie pas grand-chose pour moi. Quelqu'un a un extrait de code qui fait un CATextLayer
avec un peu de texte qui est clair?
Voici le texte de la documentation d'Apple:
Remarque: CATextLayer désactive l'anticrénelage des sous-pixels lors du rendu du texte. Le texte ne peut être dessiné à l'aide de l'anticrénelage sous-pixel que lorsqu'il est composé dans un arrière-plan opaque existant en même temps qu'il est pixellisé. Il n'y a aucun moyen de dessiner un texte antialiasé de sous-pixels par lui-même, que ce soit dans une image ou un calque, séparément avant d'avoir les pixels d'arrière-plan dans lesquels tisser les pixels du texte. La définition de la propriété d'opacité du calque sur OUI ne modifie pas le mode de rendu.
La deuxième phrase implique que l'on peut obtenir un beau texte si l' composites
on en fait un existing opaque background at the same time that it's rasterized.
C'est génial, mais comment puis-je le composer et comment lui donner un arrière-plan opaque et comment le pixelliser?
Le code qu'ils utilisent dans leur exemple de menu Kiosk 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
Merci!
EDIT: Ajout du code que j'ai réellement utilisé qui a abouti à un texte flou. C'est à partir d'une question connexe que j'ai postée sur l'ajout d'une boîte UILabel
plutôt que sur une CATextLayer
boîte noire. 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.