Ios 为什么在';派片';是否使用UIBezierPath正确绘制?

Ios 为什么在';派片';是否使用UIBezierPath正确绘制?,ios,swift,uibezierpath,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_radi

我试着在一个圆中画一个“饼片”,其中一条边是从顶部到中心垂直的,一条边是从顶部点到圆上一点的弧,最后一条边是从弧的末端到中心的

以下是我目前使用的代码:

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
    }
  }
当我试着在一个给定的矩形内画这个时,我得到的是:


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

我认为您的顶部和中心计算是错误的

而不是

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


在这个有限的上下文中,我的名字有点奇怪,但“中心”指的是圆的中心,这是另一个视图,arcview对象的边界矩形沿该中心垂直运行。因此,这是一个好主意,但不太管用。
let center = CGPoint(x: rect.midX y:rect.midY
let top = CGPoint(x:x1, y:rect.midY)