2014-10-01 72 views
1

我在我的应用程序中有一个圆形的进度条,它似乎工作得很好。但是,出于某种原因,我无法让进度条缩小。无法将进度条重置为0%

基本上它的功能是显示他们花费的用户预算的百分比。但是,用户也可以添加信用交易,当然,由于他们增加了总预算,因此您期望减少进度栏。但似乎没有这样做。当预算重置时,我也需要将其重置为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) 

有没有想法?

回答

2

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

class ProgressCircle: UIView { 

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

    (The rest of your code...) 
+0

啊,那么setNeedsDisplay()函数应该做什么? – user3746428 2014-10-02 21:51:22

+1

这是默认的内置方法,它是UIView的一部分。它告诉它需要重绘自己的视图。 – 2014-10-03 20:58:44

+0

啊,明白了。非常感谢。 – user3746428 2014-10-03 21:16:47