我的应用程序中有一个进度圈,适用于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)
}
答案 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)