将UILabel放在圆圈中

时间:2012-04-07 16:18:57

标签: iphone ios uilabel drawrect

我想将UILabel放在我圈子的中心,但我似乎无法影响标签的位置。我只能通过改变CGRect框架的高度来影响标签的位置。更改其他值根本不会影响位置。

这是我的Circle.m代码

- (id)initWithFrame:(CGRect)frame radius:(CGFloat)aRadius color:(UIColor*) aColor {
    self = [super initWithFrame:frame];
    if (self) {
        self.opaque = NO;

        [self setRadius:aRadius];
        [self setColor:aColor];
    }
    return self;
}


- (void)drawRect:(CGRect)rect
{

    NSString *string = @"1";
    UIFont* font = [UIFont systemFontOfSize:80];
    UILabel *label = [[UILabel alloc] init];
    label.text = string;
    label.textColor = [UIColor whiteColor];
    label.font = font;

    CGRect frame = label.frame;
    frame = CGRectMake(10, 10, 0, 85);
    label.frame = frame;

    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    [color setFill];
    circle = CGRectMake(0, 0, radius, radius);

    CGContextAddEllipseInRect(contextRef, circle);
    CGContextDrawPath (contextRef, kCGPathFill);
    [label drawRect:circle];

}

和我的viewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGFloat radius = 70;
    CGRect position = CGRectMake(0, 0, radius, radius);
    Circle *myCircle = [[Circle alloc] initWithFrame:position radius:radius color:[UIColor redColor]];
    [self.view addSubview:myCircle];

}

1 个答案:

答案 0 :(得分:4)

您不应该在UIView中分配新的drawRect:(并且UILabelUIView的子类)。有一些很好的方法可以做你想要的,但是没有一种方法涉及在UILabel中分配新的drawRect:

一种方法是让您的圈子在其初始值设定项中为自己设置UILabel子视图,并将标签置于layoutSubviews中心。然后在drawRect:中,您只需绘制圆圈,而不必担心绘制标签的文字:

@implementation Circle {
    UILabel *_label;
}

@synthesize radius = _radius;
@synthesize color = _color;

- (id)initWithFrame:(CGRect)frame radius:(CGFloat)aRadius color:(UIColor*) aColor {
    self = [super initWithFrame:frame];
    if (self) {
        self.opaque = NO;

        [self setRadius:aRadius];
        [self setColor:aColor];

        _label = [[UILabel alloc] init];
        _label.font = [UIFont systemFontOfSize:80];
        _label.textColor = [UIColor whiteColor];
        _label.text = @"1";
        [_label sizeToFit];
        [self addSubview:_label];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    CGSize mySize = self.bounds.size;
    _label.center = CGPointMake(mySize.width * 0.5f, mySize.height * 0.5f);
}

- (void)drawRect:(CGRect)rect {
    [self.color setFill];
    CGSize mySize = self.bounds.size;
    CGFloat radius = self.radius;
    [[UIBezierPath bezierPathWithOvalInRect:CGRectMake(mySize.width * 0.5f, mySize.height * 0.5f, self.radius, self.radius)] fill];
}