从弧创建UIBezierPath会增加额外的行

时间:2018-05-14 11:45:30

标签: swift uibezierpath

我试图绘制一个充满黑色的圆角矩形。但相反,它里面有很多白色。问题是BezierPath(arcCenter:...)关闭了路径,即使未调用close()

enter image description here enter image description here

在第二张图片中,我删除了一个部分,以便可以看到结构。我的形状由4条线和4条小弧组成。

我设法找到了这些答案,但都没有帮助。我想他们会解决所提出的问题,但是他们都没有解释发生了什么,以及如何避免这种额外的线条。

addArc(withCenter) closing path

How can I prevent closing Bezier Path

Extra line when drawing an arc in swift

我为每个弧使用的代码都是这样的

let extent = CGFloat(startAngle) // -1.5707963267948966
let end = extent + CGFloat(arcAngle) // 0
let cx = CGFloat(x + w / 2)
let cy = CGFloat(y + h / 2)
let maxSize = CGFloat(max(w, h))
let path = MBezierPath(arcCenter: CGPoint.zero, radius: maxSize / 2, startAngle: extent, endAngle: end, clockwise: arcAngle >= 0)

var transform = CGAffineTransform(translationX: cx, y: cy)
transform = transform.rotated(by: CGFloat(rotation))
path.apply(transform.scaledBy(x: CGFloat(w) / maxSize, y: CGFloat(h) / maxSize))

bezierPath.append(path)

请求的修改

  1. 我绘制的路径采用svg格式

    <path d="M 140 25 L 220 25 A 10 20 0 0 1 230 45 L 230 105 A 10 20 0 0 1 220 125 L 140 125 A 10 20 0 0 1 130 105 L 130 45 A 10 20 0 0 1 140 25 L 220 25 " fill="black" stroke="red" />

  2. 在调试器中看到的4个角的值出现顺序:

    extent = -pi / 2,0,pi / 2,pi

    end = 0,pi / 2,pi,3 * pi / 2

    1. 使用CGContext的drawPath方法绘制路径。它在无数其他路径上运行良好。它就像ctx!.drawPath(using: .fill)

    2. 一样填充
    3. MBezierPath是一个typedef。 public typealias MBezierPath = UIBezierPath抱歉。所有问题都发生在开源的Macaw库中。

    4. 我会尝试更清楚地说明问题。请参见第二张图片左下角的圆弧。弧本身是红色的,并且还以一种方式填充黑色,这表明有一条额外的线连接弧的末端。如果有真正的线条那么它也会是红色的,所以事实并非如此,但是显然有一些我不需要的东西。

      我还要补充说bezierPath.addArc(withCenter:...)没有关闭路径,一切正常。但是在这种情况下,我必须使用BezierPath(arcCenter:...)创建一个单独的路径,因为我需要应用变换矩阵,然后才能将此弧路径添加到包含其余形状的路径。

0 个答案:

没有答案