addArc(withCenter) closing path

2020-02-01 17:29发布

The following code:

  let size = CGSize(width: 200, height: 30)
  let rect = CGRect(origin: .zero, size: size)

  let path1 = UIBezierPath()
  path1.move(to: CGPoint(x: 10, y: 5))
  path1.addLine(to: CGPoint(x: 180, y: 5))
  path1.addArc(withCenter: CGPoint(x: 180, y: 20), radius: 15, 
    startAngle: (3.14159 / 2), endAngle: (3 * 3.14159 / 2), clockwise: false)

produces this:

enter image description here

Ok, am I missing something? I do not want to close this path. I never call path1.close(). I want to add another straight line from the end of the arc, not from the closed version of it. Basically, I don't want the half circle to be closed, how can I do that?

2条回答
Anthone
2楼-- · 2020-02-01 18:16

You need to start your arc at -90 degrees and end it at +90 degrees. You need also to change its direction. You need to do as follow:

path1.addArc(withCenter: CGPoint(x: 180, y: 20), radius: 15, startAngle: -.pi/2, endAngle: .pi/2, clockwise: true)

If you would like to complete the shape it would look like this:

let path1 = UIBezierPath()
path1.move(to: CGPoint(x: 10, y: 5))
path1.addLine(to: CGPoint(x: 180, y: 5))
path1.addArc(withCenter: CGPoint(x: 180, y: 20), radius: 15, startAngle: -.pi/2, endAngle: .pi/2, clockwise: true)
path1.addLine(to: CGPoint(x: 10, y: 35))
path1.addArc(withCenter: CGPoint(x: 10, y: 20), radius: 15, startAngle: .pi/2, endAngle:-.pi/2 , clockwise: true)

enter image description here

查看更多
再贱就再见
3楼-- · 2020-02-01 18:21

Hope this will help you to achieve your result

 let size = CGRect(origin: .zero, size: CGSize(width : 200 , height : 30))

        let path = UIBezierPath()
        path.move(to: CGPoint(x: 10, y: 100))
        path.addLine(to: CGPoint(x: 180, y: 100))
        path.addArc(withCenter: CGPoint(x:180 , y: 85), radius: 15, startAngle: (3.14159 / 2), endAngle:  (3 * 3.14159 / 2), clockwise: false)

    path.addLine(to: CGPoint(x: 10, y: 70)) //y = radius * 2

Above code will draw this in your canvas . enter image description here

查看更多
登录 后发表回答