我正在尝试创建一个带有圆角和阴影的自定义NSView。我创建了一个NSView子类,并有以下drawRect:method
- (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是互斥的,所以我显然错过了一些东西。
任何想法都将不胜感激!
看起来阴影不尊重剪切路径。你试过[path fill]
而不是NSFillRect
吗?
您可以使用CALayer的cornerRadius
方法来获得圆角效果。