2012-10-13 66 views
0

我有一個NSView,具有自定義背景繪製的子類,用漸變填充。 在IB中,我在其中間放置了一個複選框。部分繪製NSView背景,使用漸變

這是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上的其他控件上。

這種事情的建議方法是什麼?

一種選擇是使控件的高度與視圖相同,但這會導致將來出現問題。

回答

2

答案是,總是吸引視圖的整個區域,而不僅僅是dirtyRect

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