Wyśrodkuj niestandardowy widok UIView pionowo i poziomo za pomocą układu automatycznego
Próbuję zbudować dość prosty animowany interfejs użytkownika przy użyciu nowo udostępnionego interfejsu API automatycznego układu iOS 6. Widok niestandardowy, który buduję, ma okrąg, który chcę wyśrodkować w pionie i poziomie.
Niestety nie mogę zrozumieć, dlaczego moje ograniczenia wydają się działać poprawnie dla elementów UIButton i UILabel, ale dają dziwne wyniki, gdy używam niestandardowego widoku z niestandardowym CALayer (w tym przypadku kółkiem, które ostatecznie zostanie animowane).
Żeby było jasne, nie chcę, aby mój widok rozszerzał się, aby wypełnić cały ekran, ale aby mieć dynamiczne „dopełnienie”, tak aby widok był pionowo wyśrodkowany zarówno na iPhone 4, jak i 5. Powinienem również zauważyć, że jestem bardzo nowe w Cocoa i 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);
}
...
Zasadniczo ograniczenia, które zaimplementowałem to:
wyśrodkuj pionowo wewnątrz widoku rodzicaśrodkowo poziomo wewnątrz widoku rodzicaI to jest wynik, który otrzymuję:
Każda pomoc byłaby bardzo mile widziana, zastanawiałem się nad tym od kilku dni.
Dzięki