9

我有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];

这是其中两个角的图片(在小图片中不那么明显):

角落

有谁知道这是什么原因造成的?我只是错过了什么吗?

谢谢你的帮助

4

2 回答 2

19

roundrect 的直线恰好位于视图的边界上,因此每条线的一半宽度被截断。(就好像它们在子像素上一样。)

尝试改变

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看起来有点奇怪或模糊,请尝试将其移动半个像素。

于 2011-04-19T21:08:39.537 回答
0

看看文档中的setFlatness:方法。NSBezierPath它控制渲染曲线的平滑程度。我相信将其设置为较小的数字(默认值为 0.6)会产生更平滑的曲线,但代价是更多的计算(尽管对于简单的路径,我怀疑它很重要)。

于 2011-04-19T20:33:32.453 回答