サブクラス化された 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 つのオプションは、コントロールの高さをビューと同じにすることですが、これは将来的に問題を引き起こします。