UIActivityIndicatorView не отвечает - PullRequest
2 голосов
/ 22 февраля 2012

Когда запускается UIButton, запускается UIActivityIndicator, а затем останавливается, когда заканчивается implementLogin:

-(IBAction)loginButton {
    NSLog(@"loginButton triggered");

    // Checks the Fields are not empty 
    if ([sessionIdField.text length] != 0 && [usernameField.text length] != 0 ) {
        NSLog(@"Beginning Spinner");
        // Displays spinner
        [activitySpinner startAnimating];

        [self implementLogin]; 

        // Displays spinner
        [activitySpinner stopAnimating];
    }
}

Однако во время выполнения счетчик не появляется!Я установил счетчик на «скрыть при остановке».

Когда я устанавливаю индикатор активности для анимации до загрузки представления, он выглядит так, как и должен, поэтому я предполагаю, что у него есть проблема с UIButton ... (Также я использую «Touch Up Inside» для кнопки.)

Это простая проблема ... Может кто-нибудь помочь?

Спасибо

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Что бы ни делал implementLogin (возможно, отправляя сетевой запрос), он делает это в основном потоке, который, вероятно, блокирует обновления пользовательского интерфейса, такие как анимация вращения.

Вы можете перекодировать что-то вроде этого:

[activitySpinner startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_PRIORITY_DEFAULT, 0), ^{
    [self implementLogin]; 
    dispatch_async(dispatch_get_main_queue(), ^{
        // Stops spinner
        [activitySpinner stopAnimating];
    }
}

[Код не проверен, но вы понимаете.]

Здесь происходит то, что вы отправляете задачу входа в фоновый режим, и последнее, что блокирует, будетсделать, это остановить спиннер в главном потоке (как отдельная задача).

0 голосов
/ 22 февраля 2012

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

Я предполагаю, что вывод 'Beginning Spinner' правильно (?)

Если это так, вы, вероятно, неправильно инициализировали UIActivityIndicatorView. Это выглядит так?

activitySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activitySpinner.hidesWhenStopped = YES;
[view addSubview:activitySpinner];
...