gpt4 book ai didi

text - 如何使 CATextLayer 中的文本清晰

转载 作者:IT王子 更新时间:2023-10-29 07:30:00 24 4
gpt4 key购买 nike

我制作了一个 CALayer 并添加了 CATextLayer,但文本变得模糊。在文档中,他们谈论“亚像素抗锯齿”,但这对我来说意义不大。谁有代码片段可以使 CATextLayer 带有一些清晰的文本?

这是 Apple 文档中的文本:

Note: CATextLayer disables sub-pixel antialiasing when rendering text. Text can only be drawn using sub-pixel antialiasing when it is composited into an existing opaque background at the same time that it's rasterized. There is no way to draw subpixel-antialiased text by itself, whether into an image or a layer, separately in advance of having the background pixels to weave the text pixels into. Setting the opacity property of the layer to YES does not change the rendering mode.

第二句话暗示,如果在光栅化的同时将文本合成现有的不透明背景中,那么可以获得好看的文本。这很好,但是如何我如何合成它?如何给它一个不透明的背景?如何栅格化它?

他们在 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

谢谢!


编辑:添加我实际使用的导致文本模糊的代码。它来 self 发布的关于添加 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:请参阅下面我的回答,了解如何解决这个问题。某人。

最佳答案

简答——您需要设置内容缩放:

textLayer.contentsScale = [[UIScreen mainScreen] scale];

不久前我了解到,当您使用自定义绘图代码时,您必须检查视网膜显示并相应地缩放图形。 UIKit 负责大部分工作,包括字体缩放。

CATextLayer 不是这样。

我的模糊来自于 .zPosition 不为零,也就是说,我对我的父层应用了一个变换。通过将其设置为零,模糊消失,取而代之的是严重的像素化。

搜索high和low后,我发现你可以为一个CATextLayer设置.contentsScale,你可以将它设置为[[UIScreen mainScreen] scale] 以匹配屏幕分辨率。 (我假设这适用于非视网膜,但我还没有检查 - 太累了)

在为我的 CATextLayer 包含这个之后,文本变得清晰了。注意 - 父层不需要。

模糊度如何?当您在 3D 中旋转时,它又回来了,但您没有注意到它,因为文本开始时很清晰,而当它在运动时,您无法分辨。

问题解决了!

关于text - 如何使 CATextLayer 中的文本清晰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3815443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com