Попробуйте это:
UIView *view = /* whatever your main view is */
UIActivityIndicatorView *spinner = [[UIActivityIndicatorVIew alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
CGRect frame = spinner.frame;
frame.origin.x = view.frame.size.width / 2 - frame.size.width / 2;
frame.origin.y = view.frame.size.height / 2 - frame.size.height / 2;
spinner.frame = frame;
[view addSubview:spinner];
[spinner startAnimating];
[spinner release]; // Or, you could keep a handle to this for later to stop animating it
Это, по сути, центрирует счетчик по стороннему виду, каким бы он ни был.
Если вы не держите ручку для счетчика, и если счетчикединственное подпредставление представления (или, по крайней мере, в известной позиции), вы можете позже получить к нему указатель, окунувшись в [view subviews]
.
РЕДАКТИРОВАТЬ: Вы также можете использовать CGRectGetMidX()
иCGRectGetMidY()
вместо приведенных выше более сложных уравнений для нахождения x
и y
... Ваш пробег может отличаться.: -)
РЕДАКТИРОВАТЬ (25.02.2016)
Этот ответ недавно получил некоторые положительные голоса, поэтому я подумал, что обновление было в порядке.На самом деле есть еще лучший способ сделать это сейчас.Этот пример помещает UIActivityIndicatorView
в центр UITableView
.
self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
_spinner.translatesAutoresizingMaskIntoConstraints = NO;
_spinner.hidesWhenStopped = YES;
[self.tableView addSubview:self.spinner];
[self.tableView addConstraints:@[
[NSLayoutConstraint constraintWithItem:_spinner
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.tableView
attribute:NSLayoutAttributeCenterX
multiplier:1 constant:0],
[NSLayoutConstraint constraintWithItem:_spinner
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:self.tableView
attribute:NSLayoutAttributeCenterY
multiplier:1 constant:0]
]];