12

我正在尝试创建一个带有圆角和阴影的自定义 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];
}

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

任何想法都非常感谢!

4

2 回答 2

5

看起来阴影不尊重剪切路径。你试过[path fill]代替NSFillRect吗?

于 2011-04-28T20:24:58.720 回答
0

您可以使用CALayer的cornerRadius方法来获得圆角效果。

于 2011-04-28T20:26:39.787 回答