Как установить серый цвет фона для UIActivityIndicator при загрузке на UIView в iOS - PullRequest
10 голосов
/ 04 ноября 2011

В настоящее время у меня на экране появляется 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];


}

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

Ответы [ 9 ]

22 голосов
/ 12 мая 2012

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

    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];
14 голосов
/ 04 ноября 2011

Вы должны проверить 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)
};`
6 голосов
/ 08 января 2014

Попробуйте этот простой метод Это хорошо работает для меня ....

- (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];
}
3 голосов
/ 01 июля 2012

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

[_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];

Обязательно проверьте"Скрывается, когда Остановлено" в инспекторе атрибутов в XCode с выбранным индикатором активности.

1 голос
/ 04 ноября 2011

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

0 голосов
/ 29 августа 2017

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()
0 голосов
/ 29 апреля 2017

Начиная с Xcode 8.3, в раскадровке есть способ сделать это:

  1. Добавьте представление Activity в вашу сцену, желательно в конец списка объектов в вашем представлении, чтобы оноВы увидите «сверху» всего
  2. Сделайте так, чтобы оно охватывало весь вид, добавив ограничения
  3. Нажмите на инспекторе атрибутов
  4. Включите «Скрывает при остановке»
  5. Установите «Альфа»> 0 (хорошо 0,3)
  6. Установите «Фон» темного цвета (хорошо работает черный)

Вот скриншот .

0 голосов
/ 30 марта 2016

@ 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)
0 голосов
/ 01 марта 2013

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

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>

Таким образом, блесна останется непрозрачной.

...