2013-08-28 42 views
0

我有下一個問題:
我有NSTextFieldCell的子類。在這個小類中,我重寫了drawWithFrame:方法NSCell並繪製了自定義的半透明視覺表示。該子類插入NSTextField,插入半透明視圖。接下來的問題是:繪圖代碼相互疊加,即Cocoa不斷地調用drawWithFrame:方法,並不斷疊加當前繪製結果到以前的繪圖結果。我怎樣才能避免彼此疊加繪圖?
有代碼:
NSCell不斷重繪

@interface MySubclass : NSTextFieldCell 
... 
@end 

@implementation 
... 
// Only this methods overrided 
- (void) drawWithFrame: (NSRect)cellFrame inView: (NSView *)controlView 
{ 
    [_someGradient drawInRect:cellFrame angle:90]; // gradient alpha is 0.5f 

    NSBezierPath* path = [NSBezierPath bezierPathWithRect:rect]; 
    [path setClip]; 

    NSShadow* shadow = [[NSShadow new] autorelease]; 
    // setup shadow 
    [shadow set]; 
    [path stroke]; 

    [_someColor setStroke]; 
    [path stroke]; 

    [super drawWithFrame:cellFrame inView:controlView]; 
} 
... 
@end 
+0

請輸入密碼?很難猜測發生了什麼。 – Abizern

+0

這是足夠的代碼?你需要什麼代碼? – Lexandr

+0

這段簡短的代碼示例沒有顯示任何可能導致不斷重繪的內容,因此無論是在未顯示的代碼中還是在此單元實現之外。 –

回答

0

感謝所有。在我的情況下,也許會對某人有所幫助,我解決了這個問題之前撥打CGContextBeginTransparencyLayerCGContextEndTransparencyLayer後繪製命令。