UIActivityIndicatorView не отображается до завершения загрузки

У меня есть кнопка на текущем контроллере просмотра, подключенном к IBAction.

В IBAction я создаю UIActivityIndicatorView, как обычно, с [self.view addSubView], затем загружаю несколько изображений.

Я пробовал setNeedsDisplay для представления индикатора, контроллера представления и окна, но он по-прежнему загружает изображения перед отображением индикатора, что, конечно, совершенно бесполезно для меня.

Итак, я ищу способ либо заставить мгновенную перерисовку (что, если я немного подумаю об этом, вряд ли заработает), либо способ загрузки картинок после появления индикатора, либо способ запустить отдельный поток или что-то подобное, чтобы начать анимацию/показывать индикатор, или поместить индикатор в отдельный контроллер представления и каким-то образом заставить его добавить/показать себя, прежде чем переходить к загрузке изображения.

Рекомендации?


person Henrik Erlandsson    schedule 04.11.2010    source источник


Ответы (1)


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

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

Вот пример:

//do stuff...
[activityIndicatorView startAnimating];
[NSThread detachNewThreadSelector:@selector(loadImages) toTarget:self withObject:nil];

В вашем методе loadImages:

- (void) loadImages {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   //load images...
   [activityIndicatorView performSelectorOnMainThread:@selector(stopAnimating)];
   [pool drain];
}
person Jacob Relkin    schedule 04.11.2010
comment
Спасибо, сработало как шарм! И это просто и полезно для одноразового использования. Какие-нибудь советы о том, как думать при использовании его в более тяжелом приложении с большим количеством загрузки и потоков? - person Henrik Erlandsson; 04.11.2010
comment
У меня был аналогичный случай, когда мне нужно добавить индикатор активности на кнопку, нажатую аксессуаром, и при нажатии он переходит в DetailsView. Любые предложения о том, как это можно сделать? индикатор активности.. - person Sindhia; 18.01.2013
comment
@Sindhia Ты звонил -startAnimating на свой UIActivityIndicatorView? - person Jacob Relkin; 18.01.2013
comment
Да, я звонил. Но поскольку я добавляю код для представления следующего вида при нажатии кнопки аксессуара ниже запуска анимации, я не мог видеть индикатор активности. Так что в таком случае мне делать? - person Sindhia; 18.01.2013
comment
Джейкоб, ты гений. +1 за помощь. - person x4h1d; 30.08.2013