0

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];

}
4

1 に答える 1

4

UIViewに新しいを割り当てないでくださいdrawRect:(およびUILabelのサブクラスですUIView)。あなたがやりたいことをするためのいくつかの良い方法がありますが、それらのどれもに新しいものを割り当てることを含みませUILabeldrawRect:

1つの方法は、Circleに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];
}
于 2012-04-08T04:31:54.370 に答える