gpt4 book ai didi

cocoa - 具有比例变换的模糊 CATextLayer

转载 作者:行者123 更新时间:2023-12-03 16:40:39 27 4
gpt4 key购买 nike

我已经束手无策了。我已经尝试了我认为的消除 CATextLayer 模糊的一切方法,但无济于事。诚然,有些东西是有帮助的,但是当放大 2 倍时,文本仍然太模糊,远不及非 CATextLayer 文本的清晰度。

这是我的情况。我有一个图层托管 View ,它可以包含许多子图层,包括 CATextLayers(在自定义 CALayer 容器内)。现在,用户可以缩放主内容层(其中包含所有子层内容),这是通过对内容层应用缩放变换来完成的。

这是我目前正在做的事情。大多数都会产生影响,尽管差异不是很大。如果我一直放大(2 倍比例因子),我会得到严重模糊的文本。

  • 确保积分坐标 - 有效并产生明显的差异,但在 2 倍比例下仍然太模糊

  • 关闭 CATextLayer 容器层上的阴影 - 尽管不是 2 倍缩放,但会有所不同

  • 确保文本图层的背景颜色完全不透明 - 尽管不是 2 倍缩放,但似乎有所不同

  • contentsScale 属性设置为所有图层的窗口背景比例因子 - 尽管不是 2 倍比例,但似乎有所不同

  • 重写此自定义 CATextLayer 子类的 -drawInContext: 以平滑、抗锯齿和子像素量化一切 - 字体渲染很多更真实,但在 2 倍比例下仍然模糊

代码片段:

- (void) drawInContext:(CGContextRef)context
{
// Allow font smoothing.
CGContextSetAllowsAntialiasing(context, YES);
CGContextSetAllowsFontSmoothing(context, YES);
CGContextSetAllowsFontSubpixelPositioning(context, YES);
CGContextSetAllowsFontSubpixelQuantization(context, YES);

// Set drawing attributes.
CGContextSetStrokeColorWithColor(context, self.foregroundColor);
CGContextSetFillColorWithColor(context, self.backgroundColor);
CGContextFillRect(context, self.bounds);

// Font smoothing.
CGContextSetShouldAntialias(context, YES);
CGContextSetShouldSmoothFonts(context, YES);
CGContextSetShouldSubpixelPositionFonts(context, YES);
CGContextSetShouldSubpixelQuantizeFonts(context, YES);

[super drawInContext:context];
}

我错过了什么?

最佳答案

为了获得最清晰的文本,除了原始问题中提到的所有内容之外,影响最大的解决方案是将文本层的 contentsScale 值加倍到窗口背景比例因子的两倍 -如果您想支持 2 倍缩放时的清晰文本。

如果您想在更高的缩放值下支持清晰的文本,请使用应用程序的最大缩放系数作为调整后的 contentsScale。例如,您可以通过重写自定义 CATextLayer 子类的 -setContentsScale: 来实现此目的:

- (void) setContentsScale:(CGFloat)contentsScale
{
[super setContentsScale:contentsScale * kMaxZoomFactor];
}

请注意,请确保通过覆盖图层托管 View 的 -viewDidChangeBackingProperties 将 View 支持属性的更改(例如,更改为更高分辨率的屏幕)传播到图层托管的层次结构:

- (void) viewDidChangeBackingProperties
{
// Propagate self.window.backingScaleFactor change to layer hierarchy.
}

关于cocoa - 具有比例变换的模糊 CATextLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224748/

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