首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSBezierPath绘图

NSBezierPath绘图
EN

Stack Overflow用户
提问于 2012-12-03 05:35:26
回答 2查看 4.2K关注 0票数 13

我想在NSImage上做一个圆角矩形的轮廓,我认为使用NSBezierPath会是最好的方法。然而,我遇到了一个问题:我没有绘制一条漂亮的曲线,而是这样:

出于我不能理解的原因,NSBezierPath用比其他部分更深的颜色绘制圆角部分。

下面是我使用的代码(在自定义视图上的drawRect:调用中):

代码语言:javascript
复制
NSBezierPath* bp = [NSBezierPath bezierPathWithRoundedRect: self.bounds xRadius: 5 yRadius: 5];
[[[NSColor blackColor] colorWithAlphaComponent: 0.5] setStroke];
[bp stroke];

有什么想法吗?

编辑:

如果我将路径设置为0.5,一切都会画得很好。但是,为什么当我将路径偏移10个像素(例如)时,我会得到这个结果?

如果我理解正确的话,它也应该画出一条细线。

EN

回答 2

Stack Overflow用户

发布于 2012-12-03 06:10:31

许多渲染系统都是从PostScript绘图模型派生而来的。Core Graphics就是这些衍生系统中的一个。(这里有一些其他的: PDF,SVGthe HTML Canvas 2D ContextCairo。)

所有这些系统都有用固定宽度的线条来描画路径的想法。当您描边路径时,线跨越路径:线的宽度的一半在路径的一侧,线的宽度的一半在另一侧。下面的图表可能会让这一点变得更清楚:

现在,当您绘制位于视图边界的路径时,会发生什么情况?一半的笔划将落在您的视图边界之外,并被裁剪掉-而不是绘制。您将只看到落入视图边界内的笔划的一半。

当您使用圆角时,该角将远离视图边界,朝向其中心,因此角周围的更多笔划落在视图边界内。因此,笔划看起来在圆角附近变得更粗,如下所示:

要解决这个问题,您需要将路径插入线宽的一半,以便整个笔划沿整个路径落在视图的边界内。默认线宽为1.0,因此:

代码语言:javascript
复制
NSBezierPath* bp = [NSBezierPath bezierPathWithRoundedRect:
    NSRectInset(self.bounds, 0.5, 0.5) xRadius:5 yRadius:5];
票数 55
EN

Stack Overflow用户

发布于 2019-03-13 10:25:00

在iOS字段中,只需减去圆的半径即可防止被裁剪。

代码语言:javascript
复制
UIBezierPath *roundPath = [UIBezierPath bezierPath];
[roundPath addArcWithCenter:
CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2)
 radius:(self.frame.size.width / 2 - 0.5) 
startAngle:M_PI_2 endAngle:M_PI * 3 / 2.f clockwise:YES];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13674118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档