在视图上居中进度圈以适应新的屏幕尺寸

时间:2014-10-04 21:35:16

标签: ios swift drawrect

我的应用程序中有一个进度圈,适用于3.5英寸和4英寸屏幕,但我刚开始更新iPhone 6和6 Plus的应用程序,我注意到进度循环不起作用如预期的那样。

原因是我将进度圆位置硬编码为以较小屏幕为中心。

我想知道是否有人可以告诉我我需要做什么来转换它,这样无论屏幕尺寸如何,圆圈都居中?

这是我的代码:

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))

    //Code for background circle

    var context: CGContextRef = UIGraphicsGetCurrentContext()
    colourTheme = NSUserDefaults.standardUserDefaults().integerForKey("themeSettings")
    if colourTheme == 1 {
        CGContextSetFillColorWithColor(context, (UIColorFromRGB(0xEAEAEA)).CGColor)
    } else {
        CGContextSetFillColorWithColor(context, (UIColor.darkGrayColor()).CGColor)
    }
    var rectangle: CGRect = CGRectMake(0, 0, 171, 171)
    CGContextBeginPath(context)
    CGContextAddEllipseInRect(context, rectangle)
    CGContextDrawPath(context, kCGPathFill)

    UIGraphicsEndImageContext()

    if colourTheme == 1 {
        CGContextSetFillColorWithColor(context, (UIColor.darkGrayColor()).CGColor)
    } else {
        CGContextSetFillColorWithColor(context, (UIColorFromRGB(0xEAEAEA)).CGColor)
    }
    var rectangleSmall: CGRect = CGRectMake(35.95, 35.95, 99.1, 99.1) //102.6
    CGContextBeginPath(context)
    CGContextAddEllipseInRect(context, rectangleSmall)
    CGContextDrawPath(context, kCGPathFill)

    UIGraphicsEndImageContext()

    //Code for progress radius

    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)
    if percent > 100 {
        CGContextDrawImage(ctx, self.bounds, UIImage(named: "RadialProgressFillOver").CGImage)
    } else {
        CGContextDrawImage(ctx, self.bounds, UIImage(named: "RadialProgressFill").CGImage)
    }
    CGContextRestoreGState(ctx)
}

1 个答案:

答案 0 :(得分:0)

想出来。实际上这很明显,但我忘记了实际上在视图中添加进度圈的方式。

以下是我提出的解决方案:

    var circleFrame = CGRect(x: (budgetDisplayView.bounds.width/2)-85.5, y: 249, width: 171, height: 171)
    var circle = ProgressCircle(frame: circleFrame)
    self.budgetDisplayView.addSubview(circle)
    self.budgetDisplayView.sendSubviewToBack(circle)