Подтвердить что ты не робот

Как установить серый цвет фона для UIActivityIndicator при загрузке UIView в iOS

В настоящее время у меня есть UIActivityIndicator, появляющийся на экране второй или второй. Я хотел бы установить серый фон, поскольку это появляется на экране, но я не уверен, как это сделать...

Вот как я инициализировал индикатор до сих пор.

- (void)viewDidLoad
{
//...

    activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
    [activity setCenter:CGPointMake(160.0f, 208.0f)];
    [activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];

    [self.tableView addSubview:activity];

    [activity startAnimating];

    [activity performSelector:@selector(stopAnimating) withObject:nil afterDelay:1.0];


}

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Вы должны проверить SVProgressHUD

У него есть опции для маскировки фона и без труда работать с.

У SVProgressHUDMaskType есть опции для

enum {
 SVProgressHUDMaskTypeNone = 1, // allow user interactions, don't dim background UI (default)
SVProgressHUDMaskTypeClear, // disable user interactions, don't dim background UI
SVProgressHUDMaskTypeBlack, // disable user interactions, dim background UI with 50% translucent black
SVProgressHUDMaskTypeGradient // disable user interactions, dim background UI with translucent radial gradient (a-la-alertView)
};`

Ответ 2

Нет необходимости в отдельном представлении. Вот простой механизм:

    UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    self.activityIndicatorView = activity;
    // make the area larger
    [activity setFrame:self.view.frame;
    // set a background color
    [activity.layer setBackgroundColor:[[UIColor colorWithWhite: 0.0 alpha:0.30] CGColor]];
    CGPoint center = self.view.center;
    activity.center = center;
    [activity release];

Ответ 3

Попробуйте этот простой метод

 Это хорошо работает для меня....
- (void)viewDidLoad
{
    UIActivityIndicatorView *activityIndicator= [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
    activityIndicator.layer.cornerRadius = 05;
    activityIndicator.opaque = NO;
    activityIndicator.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.6f];
    activityIndicator.center = self.view.center;
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    [activityIndicator setColor:[UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]];
    [self.view addSubview: activityIndicator];
}

Ответ 4

На самом деле, я думаю, вы можете сделать это проще:)

[_activityIndicator setBounds:self.view.frame];
[_activityIndicator setCenter:self.view.center];
[_activityIndicator setAlpha:0.5f];
[_activityIndicator startAnimating];

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

    UIColor *activityBackgroundColor = [UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0];
[_activityIndicator setColor:activityBackgroundColor];

Обязательно проверьте "Hides When Stopped" в инспекторе атрибутов в Xcode с выбранным индикатором активности.

Ответ 5

Вы можете поместить представление в окно, имеющее цвет фона черного цвета с непрозрачностью 0,5. Ввод его в окно также заблокирует контроллеры навигации и контроллеры панели вкладок.

Ответ 6

Еще проще, вы можете установить цвет фона слоя на полупрозрачный черный (или любой другой цвет):

self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.activityIndicatorView.layer.backgroundColor = [[UIColor colorWithWhite:0.0f alpha:0.5f] CGColor];
self.activityIndicatorView.hidesWhenStopped = YES;
self.activityIndicatorView.frame = self.view.bounds;
[self.view addSubview:self.activityIndicatorView];

Конечно, не забывайте:

#import <QuartzCore/QuartzCore.h>

Таким образом, прядильщик останется непрозрачным.

Ответ 7

@SVMRAJESH Ответ в Swift 2.0

 let loadingIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
    loadingIndicator.layer.cornerRadius = 05

    loadingIndicator.opaque = false
    loadingIndicator.backgroundColor = UIColor(white: 0.0, alpha: 0.6)
    loadingIndicator.center = self.view.center;
    loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    loadingIndicator.color = UIColor(red:0.6,green:0.8,blue:1.0,alpha:1.0)
    loadingIndicator.startAnimating()
    self.view.addSubview(loadingIndicator)

Ответ 8

Как и в Xcode 8.3, есть способ сделать это в раскадровке:

  • Добавьте представление активности в свою сцену, предпочтительно в нижнюю часть списка объектов в вашем представлении, чтобы она отображалась "сверху" всего.
  • Заставьте его охватить весь вид, добавив ограничения
  • Нажмите "Инспектор атрибутов"
  • Включить "Hides When Stopped"
  • Установите "Альфа" > 0 (0,3 хорошо)
  • Установите "Фон" на темный цвет (черные хорошо работают)

Здесь снимок экрана.

Ответ 9

Swift 3

Чтобы установить backgroundColor

activityIndicatorView.backgroundColor = UIColor.gray // Set Activity indicator backgroundColor 

Чтобы создать и настроить индикатор активности

var activityIndicatorView   : UIActivityIndicatorView! // Declare variable to hold activity indicator

В viewDidLoad вызовите метод ниже, чтобы создать и настроить индикатор активности, также не забудьте добавить в представление (где вы хотите показать индикатор активности), вызвав view.addSubview(activityIndicatorView) в viewDidLoad. Также установите для него ограничения.

func createAndconfigureActivityIndicatorView() {

        activityIndicatorView  = UIActivityIndicatorView(activityIndicatorStyle: .white) 

        activityIndicatorView.backgroundColor = UIColor.gray // Set Activity indicator backgroundColor 

        activityIndicatorView.startAnimating() // To start animation

        activityIndicatorView.hidesWhenStopped = true // Setting this true means, when you stop the activity indicator, its automatically hidden (see below)
}

// Stops and Hides Activity Indicator
activityIndicatorView.stopAnimating()