2013-08-28 2 views
0

У меня есть следующий номер:
У меня есть подкласс NSTextFieldCell. В этом подклассе я переопределяю метод drawWithFrame: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

Спасибо всем. В моем случае, возможно, будет полезно кому-то, я решаю проблему с вызовом CGContextBeginTransparencyLayer до и CGContextEndTransparencyLayer после рисования команд.

Смежные вопросы