2016-05-23 23 views
1

私は、テーブルビューを読み込んでいるときにアニメーションスピナーを表示しようとしています。ビューの中心にビューの中心を設定する

loadingView = [[UIView alloc] initWithFrame:CGRectMake(75, 155, 170, 170)]; 
loadingView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; 
loadingView.clipsToBounds = YES; 
loadingView.layer.cornerRadius = 10.0; 

activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
activityView.frame = CGRectMake(65, 40, activityView.bounds.size.width, activityView.bounds.size.height); 
[loadingView addSubview:activityView]; 

loadingLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 115, 130, 22)]; 
loadingLabel.backgroundColor = [UIColor clearColor]; 
loadingLabel.textColor = [UIColor whiteColor]; 
loadingLabel.adjustsFontSizeToFitWidth = YES; 
loadingLabel.textAlignment = NSTextAlignmentCenter; 
loadingLabel.text = @"Loading..."; 
[loadingView addSubview:loadingLabel]; 

[self.view addSubview:loadingView]; 
[activityView startAnimating]; 

loadingViewには埋め込まれています。 私が直面している問題は次のとおりです。

  1. ロードビューはビューコントローラの中央にありません。
  2. ローディングビューをビューコントローラの中央に配置しようとしていますが、UIActivityIndicatorViewはローディングビューの中心になければなりませんが、期待通りのものになっていません。
+0

なぜCGRect値をハードコーディングしていますか?大半は各ビューの親ビューのサイズに基づいて計算する必要があります。 – rmaddy

答えて

0

のviewDidLoadではそれが動作するこのコードを追加:

ビューコントローラの場合

は、viewDidLayoutSubviewsはそれを行うには良い場所です

loadingView.center = CGPointMake(([UIScreen mainScreen] .bounds.size.width/2)、([UIScreen mainScreen] .bounds.size.height/2));

+0

okはアップデートのためにあなたのポイントありがとうございました:) –

2

ビューコントローラがサブビューをレイアウトしているときに中央に配置する必要があります。

[self.view addSubview: loadingView]; 
loadingView .center = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetHeight(self.view.frame)/2); 
+0

これは正しくありません。 'loadingView'は' self.view'の中に中心を置く必要があります。 'activityView'と' loadingLabel'は 'loadingView'の中に置かれます。 – rmaddy

1

セットフレーム:

int width = 170; 
loadingView = [[UIView alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width/2) - (width)/2, ([UIScreen mainScreen].bounds.size.height/2) - (height)/2, width, width)]; 
activityView.frame = CGRectMake((loadingView.frame.size.width/2) -(activityView.bounds.size.width/2), (loadingView.frame.size.height/2) - (activityView.bounds.size.height/2) - 11, activityView.bounds.size.width, activityView.bounds.size.height); 
loadingLabel = [[UILabel alloc] initWithFrame:CGRectMake((loadingView.frame.size.width/2) - 65, loadingView.frame.size.height - 25, 130, 22)]; 

かを

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    self.activityView.center = CGPointMake(CGRectGetWidth(self.loadingView.frame)/2, CGRectGetHeight(self.loadingView.frame)/2); 
    self.loadingView.center = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetHeight(self.view.frame)/2); 
} 
関連する問題