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 上放置的其他控件也会发生同样的情况。

对这种事情的建议方法是什么?

一种选择是使控件的高度与视图的高度相同,但这会在将来导致问题。

4

1 回答 1

2

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

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