私は途方に暮れています。ぼやけを取り除くためにすべてだと思うことを試してみましたが、CATextLayer
役に立ちませんでした。確かに、いくつかのことは役に立ちますが、テキストは 2 倍に拡大するとまだぼやけすぎており、CATextLayer
テキスト以外の鮮明さにはほど遠いものです。
これが私の状況です。CATextLayers
(カスタムCALayer
コンテナー内)を含む多くのサブレイヤーを含めることができるレイヤー ホスト ビューがあります。これで、ユーザーはメイン コンテンツ レイヤー (すべてのサブレイヤー コンテンツを含む) をズームできます。これは、スケール変換をコンテンツ レイヤーに適用することによって行われます。
これが私が現在行っていることです。大きな違いではありませんが、ほとんどの場合違いがあります。完全にズームインすると (倍率が 2 倍になります)、テキストがひどくぼやけてしまいます。
積分座標を確認する - 機能し、かなりの違いが生じますが、2x スケールではまだぼやけすぎています
CATextLayer
コンテナー レイヤーの影をオフにします - 2 倍のスケールではありませんが違いが生じますテキストレイヤーの背景色が完全に不透明であることを確認してください - 2倍のスケールではありませんが、違いがあるようです
contentsScale
プロパティをすべてのレイヤーのウィンドウバッキングスケールファクターに設定します-2倍のスケールではありませんが、違いがあるようです-drawInContext:
このカスタムサブクラスをオーバーライドCATextLayer
して、すべてをスムーズ、アンチエイリアス、およびサブピクセル量子化します。フォントはより忠実にレンダリングされますが、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];
}
私は何が欠けていますか?