2016-05-23 5 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]; 

Я встроили UIActivityIndicatorView в loadingView. Проблема, с которой я столкнулся, это:

  1. Погрузочный вид не находится в центре контроллера.
  2. Я пытаюсь сосредоточить загрузку до центра контроллера, а UIActivityIndicatorView должен находиться в центре загрузки, но он не центрируется, как я ожидаю.
+0

Почему вы произвольно кодируете любые значения CGRect? Большинство из них должно быть рассчитано на основе размера родительского представления каждого вида. – rmaddy

ответ

0

В ViewDidLoad добавить этот код работает:

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

ok получил вашу благодарность за обновление :) –

2

Вы должны центрировать его, когда диспетчер представления выкладывает подземелья.

Для контроллеров зрения, viewDidLayoutSubviews это хорошее место, чтобы сделать это:

- (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); 
} 
+0

Неправильное использование. 'loadingView' нуждается в центрировании внутри' self.view'. 'activityView' и' loadLabel' помещаются в '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)]; 

или

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

Смежные вопросы