2012-02-21 3 views
2

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

-(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», для кнопки.)

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

Благодаря

+0

Является ли 'реализацияLogin' синхронным или нет? – Costique

+0

Да реализацияLogin является синхронной. –

ответ

2

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

Вы можете перекодировать что-то вроде этого: [. Кодекс не тестировался, но вы получите идею]

[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

После игры с некоторыми методами multiThread я исправил проблему с помощью: '[NSThread detachNewThreadSelector: @selector (changeSpinner :) toTarget: self withObject: @" TRUE "];' спасибо! –

0

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

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

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

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

Я использовал построитель интерфейса, который (я считаю) инициализирует UIActivityIndicatorView для меня. Да, он скрывает преграды, и да, это уже скрыто. Затем реализацияLogLog обрабатывает несколько вызовов API. –

+0

Вы проверили 'hidden'? Тогда это ключевой момент. Если свойство «hidden» установлено YES (TRUE), оно не будет отображаться, даже если оно начнет анимацию. – fscheidl

Смежные вопросы