自定义NSView具有圆角和阴影

Lou*_*ard 11 cocoa objective-c nsview nsbezierpath nsshadow

我正在尝试使用圆角和投影创建自定义NSView.我创建了一个NSView子类并具有以下drawRect:方法

- (void)drawRect:(NSRect)dirtyRect
{
    NSRect rect = NSMakeRect([self bounds].origin.x + 3, [self bounds].origin.y + 3, [self bounds].size.width - 6, [self bounds].size.height - 6);

    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:5.0 yRadius:5.0];
    [path addClip];

    NSShadow *shadow = [[[NSShadow alloc] init] autorelease];
    [shadow setShadowColor:[NSColor redColor]];
    [shadow setShadowBlurRadius:2.0f];
    [shadow setShadowOffset:NSMakeSize(0.f, -1.f)];
    [shadow set];

    [[NSColor controlColor] set];
    NSRectFill(rect);

    [super drawRect:dirtyRect];
}
Run Code Online (Sandbox Code Playgroud)

结果是使用圆角绘制的NSView,但没有阴影(但我确实在抗锯齿中看到角落周围的红色色调).如果我注释掉NSBezierPath,那么我将得到一个带阴影的方形NSView.我没有在文档中看到任何暗示NSShadow和NSBezierPath是互斥的,所以我显然遗漏了一些东西.

任何想法都非常感谢!

Fre*_*man 5

它看起来像阴影不尊重剪切路径.你尝试过[path fill]而不是NSFillRect吗?