无法将进度条重置为0%
问题描述:
我在我的应用程序中有一个圆形的进度条,它似乎工作得很好。但是,出于某种原因,我无法让进度条缩小。无法将进度条重置为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)
有没有想法?
答
首先,进度应该是ProgressCircle的属性,而不是全局变量的属性。其次,它需要在设置时标记为需要重新显示:
class ProgressCircle: UIView {
var progress: CGFloat = 0 {
didSet {
setNeedsDisplay()
}
}
(The rest of your code...)
啊,那么setNeedsDisplay()函数应该做什么? – user3746428 2014-10-02 21:51:22
这是默认的内置方法,它是UIView的一部分。它告诉它需要重绘自己的视图。 – 2014-10-03 20:58:44
啊,明白了。非常感谢。 – user3746428 2014-10-03 21:16:47