Центрируйте пользовательский UIView по вертикали и горизонтали, используя Auto Layout
Я пытаюсь создать довольно простой анимированный пользовательский интерфейс с использованием недавно появившейся iOS 6. Auto Layout API. У настраиваемого представления, которое я создаю, есть круг, который я хочу расположить как вертикально, так и горизонтально.
К сожалению, я не могу понять, почему мои ограничения работают нормально для элементов UIButton и UILabel, но дают странные результаты, когда я использую пользовательское представление с пользовательским CALayer (в данном случае круг, который в конечном итоге будет анимированным).
Чтобы быть ясным, я не хочу, чтобы мой вид расширялся, чтобы заполнить весь экран, а скорее имел бы динамическое «заполнение», чтобы вид был вертикально центрирован как на iPhone 4, так и 5. Я должен также отметить, что я очень новый для Какао и UIKit.
RootViewController.m:
...
- (void)viewDidLoad {
[super viewDidLoad];
// Create Circle View
CGRect circle_view_rect = CGRectMake(0, 0, 100, 100);
UIView *circle_view = [[UIView alloc] initWithFrame:circle_view_rect];
// Create Circle Layer
CircleLayer *circle_layer = [[CircleLayer alloc] init];
circle_layer.needsDisplayOnBoundsChange = YES;
circle_layer.frame = circle_view.bounds;
[circle_view.layer addSublayer:circle_layer];
// Enable Auto Layout
[circle_view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:circle_view];
// Center Vertically
NSLayoutConstraint *centerYConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0.0];
[self.view addConstraint:centerYConstraint];
// Center Horizontally
NSLayoutConstraint *centerXConstraint =
[NSLayoutConstraint constraintWithItem:circle_view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0.0];
[self.view addConstraint:centerXConstraint];
}
...
CircleLayer.m:
...
- (void)drawInContext:(CGContextRef)context {
CGContextAddArc(context, 50, 50, 50, 0.0, 2*M_PI, 0);
CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextFillPath(context);
}
...
Основные ограничения, которые я реализовал:
центр вертикально внутри родительского видацентрировать горизонтально внутри родительского видаИ вот результат, который я получаю:
Любая помощь будет принята с благодарностью, я размышлял об этом уже несколько дней.
Спасибо