Есть ли способ показать экран UIActivityIndicatorView в центре экрана, чтобы отобразить NetworkActivityIndicator? Поэтому мне нужен тот же процесс, что и NetworkActivityIndicator, только с большим индикатором, который будет более заметным для пользователя.
Отображение UIActivityIndicatorView в центре экрана
Ответ 1
Попробуйте следующее:
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]
для него.
EDIT: вы также можете использовать CGRectGetMidX()
и CGRectGetMidY()
вместо более сложных уравнений выше для поиска x
и y
... Ваш пробег может отличаться.: -)
EDIT (2/25/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]
]];
Ответ 2
Это работает для меня внутри UIViewController:
- (void) viewDidLayoutSubviews {
self.activityIndicator.center = self.view.center;
}
Ответ 3
indicatorView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
indicatorView.center = self.view.center;
Ответ 4
activityInd.center = CGPointMake(160,240);
Ответ 5
-(void)setCenter:(UIView*)view{
UIActivityIndicatorView *actView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[view addSubview:actView];
[actView startAnimating];
CGSize boundsSize = view.bounds.size;
CGRect frameToCenter = actView.frame;
// center horizontally
if (frameToCenter.size.width < boundsSize.width)
frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
frameToCenter.origin.x = 0;
// center vertically
if (frameToCenter.size.height < boundsSize.height)
frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
frameToCenter.origin.y = 0;
actView.frame = frameToCenter;
}
Ответ 6
В Swift:
var activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
override func viewDidLoad() {
activityIndicator.hidesWhenStopped = true;
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray;
activityIndicator.center = view.center;
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
Для получения дополнительной информации см. ниже учебник:
http://sourcefreeze.com/uiactivityindicatorview-example-using-swift-in-ios/
Ответ 7
Это сработало для меня. Обратите внимание: я использую ограничения, а не рамки. Кадр правильно не всегда показывает прямоугольник, основанный на ориентации (этот метод входит в контроллер вида).
- (void) viewDidLayoutSubviews
{
if (self.spinner)
{
CGRect screenRect = self.view.bounds;
self.spinner.frame = CGRectMake(roundf((screenRect.size.width - 50) * 0.5f),
roundf((screenRect.size.height - 50) * 0.5f),
50,
50);
}
}
Ответ 8
Только эта работа идеально для меня, простая и быстрая:
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
[self.view addSubview:spinner];
[spinner startAnimating];
Ответ 9
в swift 2.0 xcode 7:
override func viewDidLayoutSubviews() {
self.Loader.center = self.view.center
}