我正在努力将以前的circlechart更改为donutchart(可以支持超过1个数字)。
我得到了所有角度的正确,更改了我的数据以使用数组。
但是当我试图绘制我的路径时,它只会绘制最后一条路径。
以下是该问题的示例屏幕截图:
在上面的示例中,它设置为绘制此数组:
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个值,它会按预期绘制(蓝色)
任何有助于获得多条路径的帮助,我们将不胜感激!
答案 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);
在此例程之外声明。因此,您只是将相同的路径图层反复添加为子图层 - 而不是多个路径子图层。因此,在您的界面中只显示一次,其中包含您最近最近分配给它的路径(段) - 循环最后一次迭代中的最后一个。