0

Messages/iMessage の埋め込みテキスト スタイル、または明るい灰色の背景にテキストの「白い影」スタイルを複製したいと考えています。

例

ご覧のとおり、薄い灰色の背景でもテキストに「白い影」が付きます。太字のテキストにはサブピクセル レンダリングがありますが、グレーのテキストにはありません (設計上?)。

私は試しまし-setBackgroundStyle:NSBackgroundStyleRaisedた。ただし、背景よりも暗い影を生成していました。-setBackgroundStyle:NSBackgroundStyleLoweredさらに悪いことに、フォントの色の設定が上書きされてしまいました。

それで、これを行う正しい方法は何ですか?何かトリックやサブクラス化する必要がありNSTextFieldsますか?

4

1 に答える 1

5

解決策1:

私が考えることができる最も簡単な解決策は、2つのテキストを互いに書くことです(たとえば、上部が灰色で下部が1pxの違いがある白)。


解決策2:解決策2:

そしてもちろん、それはNSTextFieldCellシャドウをサブクラス化して追加することによって行うことができます。

ちょうどこのような:

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    NSShadow *shadow = [[NSShadow alloc] init];
    [shadow setShadowOffset:NSMakeSize(0,-1)];
    [shadow setShadowColor:[NSColor whiteColor]];
    [shadow setShadowBlurRadius:0];

    NSMutableParagraphStyle *paragStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [paragStyle setAlignment:[self alignment]];

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                      [self font],NSFontAttributeName,
                      shadow,NSShadowAttributeName,
                      [self textColor],NSForegroundColorAttributeName,
                      paragStyle,NSParagraphStyleAttributeName,nil];
    [shadow release];
    [paragStyle release];

    NSAttributedString *string = [[NSAttributedString alloc] initWithString:[self stringValue] attributes:attributes];
    [self setAttributedStringValue:string];
    [string release];
    [[self attributedStringValue] drawInRect:cellFrame];
}

結果:

テキストの例

于 2012-04-14T17:53:01.443 に答える