NSBezierPath圆角矩形有坏角

nos*_*e25 9 cocoa stroke nsbezierpath

我有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];
Run Code Online (Sandbox Code Playgroud)

下面是2个角落的图片(在小图片中不那么明显):

角落

任何人都知道是什么导致了这个?我只是错过了一些东西吗?

谢谢你的帮助

Isa*_*bel 19

圆形的直线正好在视图的边界上,因此每条线的宽度的一半被切断.(好像它们在一个子像素上.)

尝试改变

NSMakeRect(0, 0, [self bounds].size.width, [self bounds].size.height)
Run Code Online (Sandbox Code Playgroud)

NSMakeRect(0.5, 0.5, [self bounds].size.width - 1, [self bounds].size.height - 1)
Run Code Online (Sandbox Code Playgroud)

如果NSBezierPath看起来有点奇怪或模糊,尝试将其移动超过半个像素.

  • 更短的方式:NSInsetRect(self.bounds,0.5,0.5) (6认同)
  • 而不是将它移动半个像素,通常最好将绘图插入路径的笔划宽度的一半,这就是您在此处实际执行的代码. (2认同)