NSViewをグラデーションで塗りつぶそうとしています。ウィンドウが背景にある場合、グラデーションはウィンドウの残りの部分と一致するように明るい色にする必要があります。以下のコードには多くのアーティファクトがあります。ウィンドウが最初に描画されるとき、背景色で描画されます。ウィンドウのサイズが変更されると、前景色が使用されます。ウィンドウを後ろに移動すると、背景色が期待どおりに使用されません。このタスクにisKeyWindowを使用するべきではありませんか?
- (void)drawRect:(NSRect)dirtyRect {
if ([[self window] isKeyWindow]) {
NSColor *startingColor = [NSColor colorWithCalibratedWhite:0.8 alpha:1.0];
NSColor *endingColor = [NSColor colorWithCalibratedWhite:0.6 alpha:1.0];
NSGradient* aGradient = [[NSGradient alloc]
initWithStartingColor:startingColor
endingColor:endingColor];
[aGradient drawInRect:[self bounds] angle:270];
} else {
NSColor *startingColor = [NSColor colorWithCalibratedWhite:0.9 alpha:1.0];
NSColor *endingColor = [NSColor colorWithCalibratedWhite:0.8 alpha:1.0];
NSGradient* aGradient = [[NSGradient alloc]
initWithStartingColor:startingColor
endingColor:endingColor];
[aGradient drawInRect:[self bounds] angle:270];
}
[super drawRect:dirtyRect];
}