4

NSString'sを使用して文字列を描画するカスタムステータスアイテムビューがありますdrawAtPoint:withAttributes:。同じテキストのシステム時計と比較すると、私のテキストにはサブピクセルのスムージングがなく、ざらざらしているように見えます。描画ポイントを(x、y)から(x + 0.5、y + 0.5)にシフトするアドバイスを見つけましたが、役に立ちませんでした。デフォルトのビューとsetTitle:同じ結果を生成します。

それはそれがどのように見えるかです:

ここに画像の説明を入力してください

システム時計の下に薄い灰色の境界線があるようですが、2回目に薄い灰色で文字列を描くことによってそれを模倣することはできませんでした。

4

3 に答える 3

1

システムのレンダリングやマシンのメニュータイトルに「フォントスムージング」が表示されません。オンにすると、文字の端に灰色ではなく、赤と青の色付きのピクセルが表示されます。ズームインすると違いは明らかです。

CGContextSetShouldSubpixelPositionFontsCGContextSetShouldSubpixelQuantizeFontsなどを使用して、サブピクセルの配置と量子化をオンまたはオフにする実験を行うことをお勧めします 。

それ以外の場合、主な違いは、システムのレンダリングにおけるかすかな白い影です。コンテキストの影をオフセット{0,1}(または、コンテキストが反転している場合は{0、-1})、ぼかしを0または1、色を100%白(30%アルファ)に設定してみてください-それは私にかなり近いように見えます。

于 2012-06-10T04:29:57.120 に答える
0

私はあなたが使うと思います

    UIGraphicsBeginImageContext(<#CGSize size#>);

コンテキストの初期化用。Retinaディスプレイでは、フォントのレンダリングがぼやけます。使用する

    UIGraphicsBeginImageContextWithOptions(myFrameSize, NO, 0.0f);

代わりにそれを修正します。

また、レイヤーを使用している場合は、自分をレイヤーデリゲートとして設定し、次の場所で描画を行うようです。

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    NSGraphicsContext *nsGraphicsContext;
    nsGraphicsContext = [NSGraphicsContext graphicsContextWithGraphicsPort:ctx
                                                                   flipped:NO];
    [NSGraphicsContext saveGraphicsState];
    [NSGraphicsContext setCurrentContext:nsGraphicsContext];

    // drawing here...

    [NSGraphicsContext restoreGraphicsState];
}

それも動作します。

于 2013-11-14T10:17:18.330 に答える
0

試す:

CGContextRef  ctx = [NSGraphicsContext currentContext].graphicsPort;
CGContextSetShouldSmoothFonts(ctx, true);

私もずっと探していました。WWDCビデオから入手しました(「Cocoaアニメーションのベストプラクティス」だったと思います)

于 2014-01-20T14:07:51.663 に答える