0

我有下一个问题:
我有NSTextFieldCell. 在这个子类中,我重写drawWithFrame:了方法NSCell并绘制了自定义的半透明视觉表示。这个子类插入到NSTextField中,插入到半透明视图中。问题来了:绘制代码相互叠加,即Cocoa不断调用drawWithFrame:方法,不断地将当前绘制结果叠加在之前的绘制结果上。如何避免相互叠加绘图?
有代码:

@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
4

1 回答 1

0

谢谢大家。就我而言,也许会对某人有所帮助,我解决了在绘制命令CGContextBeginTransparencyLayer之前和之后调用的问题。CGContextEndTransparencyLayer

于 2013-08-29T12:59:17.253 回答