我的应用程序中有一个循环进度条,它看起来效果很好。但是,出于某种原因,我无法让进度条缩小。
基本上,它的功能是显示用户所花费的预算百分比。但是,用户还可以添加信用交易,当然,由于他们增加了总预算,您可能会减少进度条。然而,它似乎并没有这样做。我还需要在重置预算时将其重置为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)
有什么想法吗?
答案 0 :(得分:2)
首先,进度应该是ProgressCircle的属性,而不是全局变量。其次,在设置时需要将其标记为需要重新显示:
class ProgressCircle: UIView {
var progress: CGFloat = 0 {
didSet {
setNeedsDisplay()
}
}
(The rest of your code...)