1

iCal の丸みを帯びたイベント アイテムの通常のテーブルのように見える NSTextFieldCell サブクラスを描画しようとしています。

この質問に基づいて、サブクラスに次のコードがあります。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor lightGrayColor] endingColor:[NSColor grayColor]];
    [gradient drawInRect:cellFrame angle:90];
    controlView.layer.cornerRadius = 0.5f;
    [[self title] drawInRect:cellFrame withAttributes:nil];
}

しかし、これはセルを通常の長方形として描画し、グラデーションで塗りつぶしますが、角を丸くしません。私は明らかに何かが欠けていますが、何ですか?

4

2 に答える 2

2

電話はどうですか:

[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel];
于 2010-09-05T18:07:28.297 に答える
1

この質問に基づいて、サブクラスに次のコードがあります: …</p>

その質問に対する受け入れられた回答は、セルがテキスト フィールド内にあり (つまり、それがビュー内の唯一のセルであり、事実上ビュー全体である)、そのビューがレイヤーでサポートされている、またはレイヤーでサポートされている可能性があることを前提としています。

ビュー全体を再描画することは想定されておらず、レイヤーを使用することはおそらく正しく機能しないため、テーブル列のセルの場合は機能しません。(テキストフィールドのレイヤーバッキングが正しく機能することを期待できるかどうかもわかりません。プレーンな NSView を超えるものは、レイヤーバッキングで動作するように作られているか、そうでないかのいずれかです。ドキュメントにそうであると書かれていない場合は、そうではありません。)

[gradient drawInRect:cellFrame angle:90];

しかし、これはセルを通常の長方形として描画し、グラデーションで塗りつぶしますが、角を丸くしません。

うん。このメソッドで行うのはこれだけなので、丸みを帯びた角がまだ指定されていない場合 (たとえば、レイヤーの角の半径など)、丸みを帯びた角を持つ形状を自分で作成して描画する必要があります。

これを行うには、角が丸い長方形のパスを作成し、その中にグラデーションを描画します。

于 2010-09-05T19:33:08.013 に答える