0

サブクラス化された NSView があり、カスタムの背景描画があり、グラデーションで塗りつぶされています。IB では、中間のどこかにチェックボックスを配置しました。

これが drawRect メソッドです。

-(void) drawRect:(NSRect)dirtyRect {
    CGFloat sc = 0.9f;
    CGFloat ec = 0.6f;  
    NSColor* startingColor = [NSColor colorWithDeviceRed:sc green:sc blue:sc alpha:1];
    NSColor* endingColor = [NSColor colorWithDeviceRed:ec green:ec blue:ec alpha:1];
    NSGradient *grad = [[NSGradient alloc] initWithStartingColor:startingColor endingColor:endingColor];
    [grad drawInRect:dirtyRect angle:270];
}

何が起こるかというと、この同じメソッドが最初にビュー領域全体を描画するために呼び出され、次に NSButton (チェックボックス) がその上にある部分を描画するために呼び出されます。もちろん、チェックボックスの背景は完全なグラデーションで描かれていますが、その部分がはるかに小さいため、正しくありません。上記のNSViewに配置した他のコントロールでも同じことが起こります。

そのようなことに対する提案されたアプローチは何ですか?

1 つのオプションは、コントロールの高さをビューと同じにすることですが、これは将来的に問題を引き起こします。

4

1 に答える 1

2

答えは、dirtyRect だけでなく、ビューの全体領域を常に描画することです。

[grad drawInRect:[self bounds] angle:270];
于 2012-11-26T22:38:44.663 に答える