2013-05-31 8 views
3

У меня в настоящее время очень странная ошибка.setHidden: есть нежелательная задержка

Вызывается метод, который должен скрыть UIActivityIndicatorView, остановив его (автоматическое скрытие при включенной остановке) и UIImageView под названием badIndicator.

В качестве замены предполагается показать еще UIImageView под названием goodIndicator.

[goodIndicator setHidden:NO]; 
[badIndicator setHidden:YES]; 
[refreshIndicator stopAnimating]; 
NSLog(@"statussetting good should be completed"); 

Консоль сразу же выводит на экран следующие данные, но на экран требуется около трех секунд.

2013-05-31 20:24:57.835 app name[5948:1603] statussetting good should be completed 

Я попытался вызовом setNeedsDisplay метода на объектах и ​​на родительский виде, а также заменить скрытым с альфа. По-прежнему возникают те же проблемы.

ответ

11

Похоже, вы вызываете это из фоновой нити. Все взаимодействие с UIKit должно происходить из основного потока. Попробуйте использовать:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [goodIndicator setHidden:NO]; 
    [badIndicator setHidden:YES]; 
    [refreshIndicator stopAnimating]; 
    NSLog(@"statussetting good should be completed"); 
}); 
+1

Совершенных, он работает как шарм. Он вызывается из обработчика завершения URL-запроса. Я не знал, что это работает на другую тему –

2

вам нужно вызвать этот метод в главном thread.Try с помощью:

-(void)hideControls { 
    [goodIndicator setHidden:NO]; 
    [badIndicator setHidden:YES]; 
    [refreshIndicator stopAnimating]; 
    NSLog(@"statussetting good should be completed"); 
} 
+2

Ваш пример - это, по сути, то же самое, что и плакат. Единственное различие заключается в том, что вы упоминаете, что называете это основной темой, но не уточняете. Для того, чтобы быть полезным, я предлагаю пример использования КАК, чтобы убедиться, что код запущен в основном потоке, в отличие от ответа выше. – Jeremy

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