Ich habe eine CALayer
mit einem hinzugefügt CATextLayer
und der Text kommt verschwommen heraus. In den Dokumenten wird von "Subpixel-Antialiasing" gesprochen, aber das bedeutet mir nicht viel. Hat jemand ein Code-Snippet, das CATextLayer
mit ein bisschen Text ein klares macht?
Hier ist der Text aus Apples Dokumentation:
Hinweis: CATextLayer deaktiviert das Subpixel-Antialiasing beim Rendern von Text. Text kann nur mit Subpixel-Antialiasing gezeichnet werden, wenn er gleichzeitig mit dem Raster in einen vorhandenen undurchsichtigen Hintergrund eingefügt wird. Es gibt keine Möglichkeit, Text mit Subpixel-Antialiasing selbst in ein Bild oder eine Ebene zu zeichnen, bevor die Hintergrundpixel zum Weben der Textpixel vorhanden sind. Durch Festlegen der Deckkrafteigenschaft der Ebene auf JA wird der Rendermodus nicht geändert.
Der zweite Satz impliziert, dass man gut aussehenden Text erhalten kann, wenn man composites
ihn in einen existing opaque background at the same time that it's rasterized.
großen Text umwandelt. Aber wie kann ich ihn zusammensetzen und wie gibt man ihm einen undurchsichtigen Hintergrund und wie rastert man ihn?
Der Code, den sie in ihrem Beispiel für ein Kiosk-Menü verwenden, lautet wie folgt: (Es ist OS X, nicht iOS, aber ich gehe davon aus, dass es funktioniert!)
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
Vielen Dank!
BEARBEITEN: Das Hinzufügen des Codes, den ich tatsächlich verwendet habe, führte zu verschwommenem Text. Es ist aus einer verwandten Frage , die ich über schrieb einen Zusatz und UILabel
nicht als CATextLayer
aber eine Black - Box stattdessen bekommen. 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: Siehe meine Antwort unten, wie dies gelöst wurde. sbg.