使用渐变部分绘制NSView背景

时间:2012-10-13 08:47:46

标签: xcode draw gradient nsview

我有一个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 个答案:

答案 0 :(得分:2)

答案是,始终绘制视图的整个区域,而不仅仅是dirtyRect

[grad drawInRect:[self bounds] angle:270];