【发布时间】:2012-11-23 11:55:46
【问题描述】:
我正在尝试使用 iOS 6 新推出的 Auto Layout API 构建一个相当简单的动画自定义 UI。我正在构建的自定义视图有一个我想要垂直和水平居中的圆圈。
不幸的是,我无法弄清楚为什么我的约束似乎适用于 UIButton 和 UILabel 元素,但是当我使用带有自定义 CALayer 的自定义视图时会产生奇怪的结果(在本例中是一个圆圈,最终会被动画化) .
要清楚,我不希望我的视图扩展以填满整个屏幕,而是具有动态“填充”,以便视图在 iPhone 4 和 5 上垂直居中。我还应该注意,我我对 Cocoa 和 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);
}
...
基本上我实现的约束是:
- 在父视图内垂直居中
- 在父视图内水平居中
这是我得到的结果:
任何帮助将不胜感激,我已经思考了几天了。
谢谢
【问题讨论】:
标签: ios cocoa-touch uiview calayer autolayout