Ale*_*lex 11 cocoa drawing objective-c nsbezierpath
我想在NSImage上做一个圆角矩形轮廓,我想使用NSBezierPath是最好的方法.然而,我遇到了一个问题:我得到了这个:而不是绘制一条漂亮的曲线:
由于我无法理解的原因,NSBezierPath正在绘制比其余部分颜色更深的圆角部分.
这是我正在使用的代码(在drawRect中:在自定义视图上调用):
NSBezierPath* bp = [NSBezierPath bezierPathWithRoundedRect: self.bounds xRadius: 5 yRadius: 5];
[[[NSColor blackColor] colorWithAlphaComponent: 0.5] setStroke];
[bp stroke];
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
如果我将路径插入0.5,一切都很好.但是,当我将路径偏移10个像素(例如)时,为什么会得到这个?
如果我理解正确的话,它也应该画一条细线......
rob*_*off 53
许多渲染系统都是从PostScript绘图模型派生的.Core Graphics是这些衍生系统之一.(以下是其他一些:PDF,SVG,HTML Canvas 2D Context,Cairo.)
所有这些系统都有想法用一些固定宽度的线条来描边.当你划过路径时,线条横跨路径:线条宽度的一半位于路径的一侧,而线条宽度的一半位于另一侧.这是一个可以使这个更清晰的图表:
现在,当您描绘沿着视图边界的路径时会发生什么?一半的笔划将落在视图的边界之外并被剪掉 - 不会被绘制.您将只看到落在视图边界内的笔划的一半.
当您使用圆角时,该角从视图的边界向其中心拉开,因此角落周围的更多笔划落在视图的边界内.因此,笔划似乎在圆角处变厚,如下所示:
要解决此问题,您需要将路径插入线宽的一半,以便整个笔划沿着整个路径落入视图的边界内.默认线宽为1.0,因此:
NSBezierPath* bp = [NSBezierPath bezierPathWithRoundedRect:
NSRectInset(self.bounds, 0.5, 0.5) xRadius:5 yRadius:5];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3552 次 |
最近记录: |