UIProgressView не обновляется, пока мое приложение загружает свои ресурсы

Я пытаюсь обновить индикатор выполнения UIProgressView, который есть в UIView во время длительного процесса загрузки ресурса. Допустим, я загружаю кучу растровых изображений из файла NIB (например, около ста). После загрузки 10 я запускаю.progress для UIProgressView, который является частью UIView, который уже отображается. Итак, я выдаю:

myView.myProgressView.progress=0.2;

Затем я загружаю еще 10 битовых карт и выдаю:

myView.myProgressView.progress=0.4;

и т. д. и т. д. Когда приложение запускается, индикатор выполнения не перемещается. Он просто остается на своей первоначальной позиции. Рискуя, чтобы выглядеть как полный придурок, должен ли я загружать свои ресурсы в отдельный поток, чтобы ОС могла обновить пользовательский интерфейс, или есть более простой способ? Спасибо за любую помощь.

2 ответа

Да. Загрузите их в отдельном потоке. Или просто использовать что-то вроде performSelector:

[self performSelector:@selector(setProgressBar) withObject:nil afterDelay:0.0];

(и создать setProgressBar функция, которая читает текущее значение из переменной-члена и обновляет пользовательский интерфейс)

Вы можете запустить шаг runloop после каждого обновления пользовательского интерфейса:

SInt32 result;
do {
    result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE);
} while(result == kCFRunLoopRunHandledSource);

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

Другие вопросы по тегам