我有一个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上的其他控件也是如此。
这种建议的方法是什么?
一个选项是使控件高度与视图相同,但这将导致将来出现问题。
答案 0 :(得分:2)
答案是,始终绘制视图的整个区域,而不仅仅是dirtyRect
[grad drawInRect:[self bounds] angle:270];