UIActivityIndicatorView не отображается до окончания загрузки - PullRequest
7 голосов
/ 04 ноября 2010

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

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

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

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

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

1 Ответ

18 голосов
/ 04 ноября 2010

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

Сначала покажите 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];
}
...