UIProgressView не обновляется, пока мое приложение загружает свои ресурсы - PullRequest
2 голосов
/ 07 августа 2009

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

myView.myProgressView.progress=0.2;

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

myView.myProgressView.progress=0.4;

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

Ответы [ 2 ]

1 голос
/ 07 августа 2009

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

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

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

0 голосов
/ 14 мая 2011

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

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

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

...