2

プロジェクトの BaseSDK を 10.6 に変更した後、カスタム描画テキストが異なって見えることに気付きました (画像を見てください: 描画用の同じコード)。

10.5 BaseSDK 未満: 画像1

10.6 BaseSDK: 画像2

[(NSString *)myString drawInRect:myRect withAttributes:myAttributes] で描画しています。

myAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
    [NSColor myColor], NSForegroundColorAttributeName,
    [NSFont systemFontOfSize:18], NSFontAttributeName,
    paragraphStyle, NSParagraphStyleAttributeName,
    shadow, NSShadowAttributeName, nil];

そのような違いの理由は何ですか、またはフォントの太さを減らす方法は何ですか? 私は厚さを減らすことを試みました

[NSFontManager convertWeight:NO ofFont:font]

しかし、見た目はあまり良くありません...

前もって感謝します。

4

3 に答える 3

2

両方の画像を拡大してよく見ると、違いがすぐにわかります (少なくとも私は違います)。

ここに画像の説明を入力

上の画像のテキストは CRT スタイルのフォント スムージングを使用しており、下の画像のテキストは Medium LCD スタイルのフォント スムージングを使用しています。(LCD フォント スムージングの 3 つのスタイルすべてで、アンチエイリアス ピクセルに色かぶりが発生します)。

なぜこれが起こっているのかを判断するには、テストのセットアップに関する詳細情報が必要です。OS X のどのバージョンでこれをテストしていますか? たとえば、アプリは 10.5 の展開ターゲットで 10.6 SDK に対してビルドされ、上の画像は OS X 10.5.x (同じマシン上) でのテスト中に取得され、下の画像は 10.6.x でのテスト中に取得されました。 ? それとも、すべてのテストが Mac OS X 10.6.x で行われ、10.5 SDK に対してビルドすると上の画像になり、10.6 SDK に対してビルドすると下の画像になりましたか? 使用している Mac のモデルは何ですか? 接続している外部 LCD または CRT ディスプレイがある場合、どのタイプを使用していますか?

上記で求められた情報がなくても、いくつかのアイデアがあります。デフォルトのフォント スムージング スタイルは 10.5 の CRT だと思いますが、10.6 のデフォルトは「自動」です。そのため、LCD ディスプレイを備えたシステムを使用していて、10.5 でテストしていて、フォント スムージング スタイルをデフォルトの CRT スタイルから変更していない場合、上の画像のような画像が表示されます。その後、同じシステムで 10.6 に切り替えた場合、10.6 の自動フォント スムージングが LCD ディスプレイを自動的に検出し、中程度の LCD スタイルのフォント スムージングを使用した可能性があります。 .

留意すべきもう 1 つの点は、フォント スムージング値がホストごとに保存されることです。たとえば、私のマシンでは、AppleFontSmoothing値は ~/Library/Preferences/ByHost/.GlobalPreferences.##########.plist に保存されます。ここで、########## はあなたのハードウェア UUID。異なるホスト設定に対して 2 つの異なる値が保存される可能性があると思います。

于 2011-05-12T17:28:38.663 に答える
2

今、私はそれが起こる理由とこの問題の修正を知っています: 10.6 でフォント LCD スムージング オプションが追加されたようです。デフォルト。

そのため、プロジェクトの BaseSDK を 10.6 に変更した後、アプリケーション内のテキストが LCD のように滑らかになり、見栄えがまったく悪くなりました。

したがって、コードの問題を修正するには、描画の前にグラフィックス コンテキストでスムージング オプションを変更します。

CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);

このメソッドのドキュメントによると、このパラメーターはグラフィックス状態の一部であることが示されているため、他のフォント描画でこのオプションを変更したくない場合は、グラフィックス状態を復元する必要があります。

この問題の理由を見つけてくれた @NSGod に感謝します。

于 2011-05-13T16:28:57.220 に答える
0

あなたはあなたが求めるものを手に入れています

[NSFont systemFontOfSize:18]

10.5 と 10.6 の間で微妙に異なるフォントである可能性が高いです。グラフィックデザイナーは、何らかの理由で夢中になりました。

の出力をログに記録すると、何が得られますか[NSFont systemFontOfSize:18]。10.5と10.6で違いはありますか?

于 2011-05-12T14:37:23.233 に答える