Swift在循环中绘制几条路径

时间:2015-05-30 16:19:35

标签: ios swift pie-chart

我正在努力将以前的circlechart更改为donutchart(可以支持超过1个数字)。

我得到了所有角度的正确,更改了我的数据以使用数组。

但是当我试图绘制我的路径时,它只会绘制最后一条路径。

以下是该问题的示例屏幕截图:

enter image description here

在上面的示例中,它设置为绘制此数组:

cell.circleChart.percentFills = [weight, 10]

其中weight是圆圈标签中显示的%。所以你可以看到它没有绘制第一个角度,但是下一个角度的起点是正确的。

这是我绘制圆环图的代码。

    override func drawRect(rect: CGRect) {
    // Define the center.
    let center = CGPoint(x:bounds.width/2, y: bounds.height/2)

    // Define the radius
    let radius: CGFloat = max(bounds.width, bounds.height)

    // Define starting and ending angles
    var startAngle: CGFloat = CGFloat(DegreesToRadians(-90))
    let endAngle: CGFloat = CGFloat(DegreesToRadians(270))

    // Set up the full path. (for the default background color)
    var path = UIBezierPath(arcCenter: center,
        radius: bounds.width/2 - arcWidth/2,
        startAngle: startAngle,
        endAngle: endAngle,
        clockwise: true)

    // draw the full chart with the background color
    path.lineWidth = arcWidth
    chartColor.setStroke()
    path.stroke()

    //calculate the arc for each per percent
    let arcLengthPerPercent = CGFloat(DegreesToRadians(360/100))

    // Temporary var for loop testing
    var i = 0

    println("startAngle before loop: \(RadiansToDegrees(Double(startAngle)))")

    for percentFill in percentFills {

        println("LOOP: \(i)")

        if i == 0 {
            fillColor = UIColor.formulaBlueColor()
            println("BLUE")
        } else {
            fillColor = UIColor.formulaGreenColor()
            println("GREEN")
        }

        //then multiply out by the actual percent
        let fillEndAngle = arcLengthPerPercent * CGFloat(percentFill) + startAngle

        println("fillEndAngle: \(RadiansToDegrees(Double(fillEndAngle)))")

        //2 - draw the outer arc
        var fillPath = UIBezierPath(arcCenter: center,
            radius: bounds.width/2 - arcWidth/2,
            startAngle: startAngle,
            endAngle: fillEndAngle,
            clockwise: true)

        progressLine.path = fillPath.CGPath
        progressLine.strokeColor = fillColor.CGColor
        progressLine.fillColor = UIColor.clearColor().CGColor
        progressLine.lineWidth = arcWidth

        // add the curve to the screen
        self.layer.addSublayer(progressLine)

        i++
        startAngle = startAngle+(arcLengthPerPercent * CGFloat(percentFill))
    }

}

我认为我可能在最后一点出错了,我将progressLine添加为subLayer,但我不知道我还应该在这里做什么。

当然我已经测试了如果我在数组中只有1个值,它会按预期绘制(蓝色)

任何有助于获得多条路径的帮助,我们将不胜感激!

1 个答案:

答案 0 :(得分:2)

  

但是当我试图绘制我的路径时,它只会绘制最后一条路径。

问题是vector<int> to_sort; vector<int> counts(1001); int maxvalue=0; for (int i : to_sort) { if(i > maxvalue) maxvalue = i; counts[i]++; } counts.resize(maxvalue+1); 在此例程之外声明。因此,您只是将相同的路径图层反复添加为子图层 - 而不是多个路径子图层。因此,在您的界面中只显示一次,其中包含您最近最近分配给它的路径(段) - 循环最后一次迭代中的最后一个。