2013-08-28 2 views
0

다음 호 출처 :
서브 클래스가 NSTextFieldCell입니다. 이 하위 클래스에서 나는 메서드를 NSCell으로 대체하고 사용자 정의 반투명 시각적 표현을 그립니다. 이 하위 클래스는 반투명보기에 삽입 된 NSTextField에 삽입됩니다. 문제는 그 다음이었습니다 : 드로잉 코드가 서로 겹쳐졌습니다. 즉, 코코아는 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을 호출하기 전에 문제를 해결합니다.

관련 문제