为什么使用UIBezierPath无法正确绘制“饼图切片”中的斜线?

时间:2019-10-27 00:04:06

标签: ios swift uibezierpath

我正在尝试在一个圆中绘制“饼图切片”,其中一条边缘从顶部到中心是垂直的,一条边缘是从顶部到该点的圆弧,最后一条边缘是弧的末端到中心。

这是我目前正在使用的代码:

class ArcView : UIView {
  override func draw(_ rect: CGRect) {
    let x1 = rect.minX
    let x2 = rect.maxX
    let y1 = rect.minY
    let y2 = rect.maxY

    let arc_radius = self.superview!.frame.width/2
    let delta_y = y2-y1
    let delta_x = x2-x1
    let angle = asin(delta_x/arc_radius)

    let center = CGPoint(x:x1, y:y2)
    let top = CGPoint(x:x1, y:y1)

    //draw path
    let path = UIBezierPath()
    path.move(to: top)
    path.addArc(withCenter: center, radius: arc_radius, startAngle: CGFloat.pi/2, endAngle: angle, clockwise: true)
    path.addLine(to: center)
    path.addLine(to: top)
    path.close()


    UIColor.green.setFill()
    path.fill()

    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath
    layer.mask = shapeLayer
    }
  }

当我尝试在给定的矩形内绘制时,这就是我得到的: Where the green section is the view I am making with the class above.

绿色部分是我在上述课程中所做的视图。我喜欢圆弧和垂直线,但我只希望有另一条边缘,即从圆弧的右点到中心的一条线。

1 个答案:

答案 0 :(得分:1)

我认为您的最高和中间计算错误。

代替

sudo mount -uw /

尝试

let center = CGPoint(x:x1, y:y2)
let top = CGPoint(x:x1, y:y1)