ios - 如何平滑贝塞尔路径中的线条连接?

标签 ios objective-c core-graphics uibezierpath

我正在尝试使用 UIBezierPath 绘制一个长方体形状。我的绘图代码如下:

((x,y)是我的 UIView 的来源,(h,w)是它的大小)

UIBezierPath *bpath1 = [UIBezierPath bezierPath];
[bpath1 moveToPoint:CGPointMake(x, y + h * 0.4)];
[bpath1 addLineToPoint:CGPointMake(x, y + h)];
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)];
[bpath1 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4)];
[bpath1 closePath];


UIBezierPath *bpath2 = [UIBezierPath bezierPath];
[bpath2 moveToPoint:CGPointMake(x + w * 0.4, y)];
[bpath2 addLineToPoint:CGPointMake(x + w, y)];
[bpath2 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4];
[bpath2 addLineToPoint:CGPointMake(x, y + h * 0.4];
[bpath2 closePath];

UIBezierPath *bpath3 = [UIBezierPath bezierPath];
[bpath3 moveToPoint:CGPointMake(x + w, y)];
[bpath3 addLineToPoint:CGPointMake(x + w, y + h - (h * 0.4))];
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h)];
[bpath3 addLineToPoint:CGPointMake(x + w - (w * 0.4), y + h * 0.4];
[bpath3 closePath];

我创建了 3 条路径,因为我希望每条路径都有不同的 alpha 值。我得到了如下所需的输出:

General output

但令我惊讶的是,h(高度)的值很少,我得到的形状如下:

Strange shape for some <code>h</code> values

现在,出现这种形状的值很少。由于每次渲染代码都相同,我不明白贝塞尔曲线路径的这种奇怪行为。为什么贝塞尔曲线路径显示出这种行为,是否有任何方法可以平滑这些关节?

最佳答案

看看 lineCapStylelineJoinStyle。具体来说,我认为这是因为 lineJoinStyle 默认为 Miter,将其更改为 Round 或更改 miterLimit

我相信这与 UIBezierPath not drawing a smooth curve 具有相同的解决方案

关于ios - 如何平滑贝塞尔路径中的线条连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809347/

相关文章:

ios - OSStatus错误-50(无效参数)AudioQueueNewInput在iOS上录制音频

ios - 如何获取按索引配对的两个单独的 Int 数组的值,然后对某些对进行条件运算?

ios - 当数组中有多个字典时,如何按升序创建数组

iphone - 如何在不平滑任何内容的情况下放大 UIImage?

ios - UIImageView 的显示速度比 CG 或 CALayer 快得多。有人知道为什么吗?

iphone - 截取部分iphone屏幕

ios - 试图理解为什么在开关更改时会崩溃

ios - 核心数据 - 查询对多关系

objective-c - 切换到纵向模态视图时不会调用 willHideViewController

ios - CGPoint 编译器错误