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

问题描述 投票:0回答:1

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

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

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.

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

ios swift uibezierpath
1个回答
0
投票

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

代替

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

尝试

let center = CGPoint(x: rect.midX y:rect.midY
let top = CGPoint(x:x1, y:rect.midY)
© www.soinside.com 2019 - 2024. All rights reserved.