我有一个 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 上放置的其他控件也会发生同样的情况。
对这种事情的建议方法是什么?
一种选择是使控件的高度与视图的高度相同,但这会在将来导致问题。