开发者

NSBezierPath rounded rectangle has bad corners

I have an NSBezierPath that makes a rounded rectangle but the corners of it look choppy and appear brighter that the rest of the stroke when viewed at full scale. My code is:

 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开发者_Python百科.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];

Heres a picture of 2 of the corners (Its not as obvious in a small picture):

NSBezierPath rounded rectangle has bad corners

Anyone know what's causing this? Am I just missing something?

Thanks for any help


The straight lines of the roundrect are exactly on the borders of the view, so half the width of each line is getting cut off. (As if they were on a subpixel.)

Try changing

NSMakeRect(0, 0, [self bounds].size.width, [self bounds].size.height)

to

NSMakeRect(0.5, 0.5, [self bounds].size.width - 1, [self bounds].size.height - 1)

If an NSBezierPath ever looks a bit weird or blurry, try shifting it over half a pixel.


Take a look at the setFlatness: method in the NSBezierPath docs. It controls how smooth rendered curves are. I believe setting it to a smaller number (the default being .6) will yield smoother curves, at the cost of more computation (though for simple paths, I doubt it matters a whole lot).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜