新しく利用可能な 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);
}
...
基本的に私が実装した制約は次のとおりです。
- 親ビュー内で垂直方向に中央揃え
- 親ビュー内で水平方向に中央揃え
そして、これは私が得る結果です:
どんな助けでも大歓迎です。私はこれを数日間考えています。
ありがとう