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
прежде чем они должны быть выполнены, и т. д.) так что будьте очень, очень осторожны.