我CALayer
添加CATextLayer
了,文本变得模糊。在文档中,他们谈论“亚像素抗锯齿”,但这对我来说意义不大。任何人都有一个代码段,可以使一些CATextLayer
清晰的文本成为?
以下是Apple文档中的文字:
注意:渲染文本时,CATextLayer禁用子像素抗锯齿。仅在对文本进行光栅化的同时将其合成到现有的不透明背景中时,才可以使用子像素抗锯齿来绘制文本。在让背景像素将文本像素编织到其中之前,无法单独将子像素抗锯齿的文本单独绘制到图像或图层中。将图层的不透明度属性设置为YES不会更改渲染模式。
第二句话意味着,如果将composites
其合并为,则可以得到美观的文本。existing opaque background at the same time that it's rasterized.
那太好了,但是如何合成它,如何赋予它不透明的背景,以及如何对其进行光栅化?
他们在Kiosk菜单示例中使用的代码是这样的:(它是OS X,不是iOS,但我认为它可以工作!)
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
谢谢!
编辑:添加我实际使用的代码导致文本模糊。这是我发布的一个相关问题,它是添加一个UILabel
而不是一个,CATextLayer
而是得到一个黑匣子。 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);
编辑2:有关如何解决此问题,请参见下面我的回答。某人