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
코드를주세요. 무슨 일이 일어나는지 추측하기는 어렵습니다. – Abizern
코드로 충분합니까? 필요한 코드는 무엇입니까? – Lexandr
이 짧은 코드 예제에서는 상수 다시 그리기가 발생하지 않는 항목을 표시하지 않으므로 표시되지 않은 코드 또는이 셀 구현 외부에서 발생합니다. –