标签隐藏在圆形背景颜色下

时间:2014-10-01 23:43:13

标签: ios swift uilabel drawrect

我刚刚在循环进度条中添加了一个背景,但是这个背景现在覆盖了我在圆圈中心的标签。

基本上,我有一个背景圆,一个半径(用于显示进度)和一个位于圆心中的标签。现在添加了圆形背景意味着标签已被覆盖。

这是我的代码:

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()
    CGContextSetFillColorWithColor(context, (UIColor.darkGrayColor()).CGColor)
    var rectangle: CGRect = CGRectMake(0, 0, 171, 171)
    CGContextBeginPath(context)
    CGContextAddEllipseInRect(context, rectangle)
    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)
    CGContextDrawImage(ctx, self.bounds, UIImage(named: "RadialProgressFill").CGImage)
    CGContextRestoreGState(ctx)
}

这就是我添加子视图的方式:

    var circleFrame = CGRect(x: 75, y: 249, width: 171, height: 171)
    var circle = ProgressCircle(frame: circleFrame)
    self.budgetDisplayView.addSubview(circle)

    circle.backgroundColor = UIColor.clearColor()

如何让标签显示在背景上?

1 个答案:

答案 0 :(得分:1)

您需要重新排序子视图。

如果您在Interface Builder中添加了ProgressCircle视图,则在Xcode的文档大纲中,将标签视图向下拖动到ProgressCircle视图下方。子视图按顺序添加,因此后面的视图位于顶部。

如果您在添加ProgressCircle后的ViewController代码中添加了subView代码,请致电sendSubviewToBackProgressCircle移到其兄弟姐妹后面:< / p>

self.budgetDisplayView.addSubview(circle)
self.budgetDisplayView.sendSubviewToBack(circle)

或者,如果您的标签@IBOutlet名为myLabel,则可将其置于最前面:

self.budgetDisplayView.bringSubviewToFront(myLabel)

最后,确保您的标签的颜色与背景一致。