2011-04-19 165 views
9

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

继承人的角落(它不是在一个小图片为明显)2的图片:

corners

任何人都知道是什么引起的?我只是想念一些东西?

感谢所有帮助

回答

18

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

+0

像魔术一样工作!非常感谢。 – nosedive25 2011-04-19 21:33:30

+2

而不是将它移动半个像素,通常是将图形插入路径的一半笔画宽度通常是一个更好的主意,这是您代码实际在此处执行的操作。 – 2011-04-19 21:48:25

+6

较短的方法:NSInsetRect(self.bounds,0.5,0.5) – sergeyne 2012-11-02 14:57:54

0

看看在NSBezierPath文档的setFlatness:方法。它控制渲染曲线的平滑程度。我相信将它设置为更小的数字(默认值为.6)将产生更平滑的曲线,但需要更多的计算量(尽管对于简单的路径,我认为这很重要)。