无法将进度条重置为0%

时间:2014-10-01 22:21:56

标签: ios swift drawrect cgpath

我的应用程序中有一个循环进度条,它看起来效果很好。但是,出于某种原因,我无法让进度条缩小。

基本上,它的功能是显示用户所花费的预算百分比。但是,用户还可以添加信用交易,当然,由于他们增加了总预算,您可能会减少进度条。然而,它似乎并没有这样做。我还需要在重置预算时将其重置为0%,这不起作用。

以下是进度圈的代码:

var progress: CGFloat = 0

class ProgressCircle: UIView {

override func drawRect(rect: CGRect) {
    var ctx = UIGraphicsGetCurrentContext()

    var innerRadiusRatio: CGFloat = 0.6

    var path: CGMutablePathRef = CGPathCreateMutable()
    var startAngle: CGFloat = CGFloat(-M_PI_2)
    var endAngle: CGFloat = CGFloat(-M_PI_2) + min(1.0, progress) * CGFloat(M_PI * 2)
    var outerRadius: CGFloat = CGRectGetWidth(self.bounds) * 0.5 - 1.0
    var innerRadius: CGFloat = outerRadius * innerRadiusRatio
    var center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect))

    CGPathAddArc(path, nil, center.x, center.y, innerRadius, startAngle, endAngle, false)
    CGPathAddArc(path, nil, center.x, center.y, outerRadius, endAngle, startAngle, true)
    CGPathCloseSubpath(path)
    CGContextAddPath(ctx, path)

    CGContextSaveGState(ctx)
    CGContextClip(ctx)
    CGContextDrawImage(ctx, self.bounds, UIImage(named: "RadialProgressFill").CGImage)
    CGContextRestoreGState(ctx)
}

这就是我目前正在尝试重置它的方式:

    progress = 0.00

这是计算进度的方式:

        percent = 100*totalSpendingsCounter/(currencyDouble + totalCreditCounter)
    let nf = NSNumberFormatter()
    nf.numberStyle = .DecimalStyle

    if percent > 100 {
        percentageDisplay.text = "100%"
    } else {
        var percentString = nf.stringFromNumber(percent) + "%"
        percentageDisplay.text = percentString
    }

    progress = CGFloat(percent/100)

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先,进度应该是ProgressCircle的属性,而不是全局变量。其次,在设置时需要将其标记为需要重新显示:

class ProgressCircle: UIView {

    var progress: CGFloat = 0 {
        didSet {
            setNeedsDisplay()
        }
    }

    (The rest of your code...)