2011-04-19 172 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)將產生更平滑的曲線,但需要更多的計算量(儘管對於簡單的路徑,我認爲這很重要)。