我有一个NSBezierPath
制作一个圆角矩形,但它的角落看起来不稳定,并且在全尺寸观看时显得比其余的笔划更亮。我的代码是:
NSBezierPath *path = [NSBezierPath bezierPath];
[path appendBezierPathWithRoundedRect:NSMakeRect(0, 0, [self bounds].size.width, [self bounds].size.height) xRadius:5 yRadius:5];
NSGradient *fill = [[NSGradient alloc] initWithColorsAndLocations:[NSColor colorWithCalibratedRed:0.247 green:0.251 blue:0.267 alpha:0.6],0.0,[NSColor colorWithCalibratedRed:0.227 green:0.227 blue:0.239 alpha:0.6],0.5,[NSColor colorWithCalibratedRed:0.180 green:0.188 blue:0.196 alpha:0.6],0.5,[NSColor colorWithCalibratedRed:0.137 green:0.137 blue:0.157 alpha:0.6],1.0, nil];
[fill drawInBezierPath:path angle:-90.0];
[[NSColor lightGrayColor] set];
[path stroke];
下面有两个角落的图片(在小图片中不那么明显):
任何人都知道造成这种情况的原因是什么?我只是错过了一些东西吗?
感谢您的帮助
答案 0 :(得分:19)
圆角的直线正好在视图的边框上,因此每条线的宽度的一半被切断。 (好像它们在一个子像素上。)
尝试更改
NSMakeRect(0, 0, [self bounds].size.width, [self bounds].size.height)
到
NSMakeRect(0.5, 0.5, [self bounds].size.width - 1, [self bounds].size.height - 1)
如果NSBezierPath
看起来有点奇怪或模糊,请尝试将其移动超过半个像素。
答案 1 :(得分:0)
查看setFlatness:
文档中的NSBezierPath
方法。它控制渲染曲线的平滑程度。我认为将它设置为较小的数字(默认值为.6)将产生更平滑的曲线,但代价是更多的计算(尽管对于简单的路径,我怀疑它很重要)。