существует ли способ отобразить анимированную прялку, в то время как основной поток делает долгую операцию? Анимация обрабатывается тем же потоком, который создал UIActivityIndicatorView, правильно? Если так, могут представления, которые принадлежат нескольким потокам, находятся в той же иерархии представления?
Все остальное сбой, я не возражаю перемещать саму долгую операцию в фоновый поток, но затем я должен был бы заморозить UI так или иначе, в то время как это работает. То, что я не уверен, как сделать.
Править: "длинный" приблизительно 2 секунды на устройстве 1-го генерала.
Решение состоит в том, чтобы запустить анимацию по крайней мере на одну итерацию через цикл выполнения перед выполнением длительной операции. Например:
[activity startAnimating];
[self performSelector:@selector(lengthyOperation) withObject:nil afterDelay:0];
Не обязательно использовать метод performSelector
, достаточно каким-то образом установить метод на выполнение позже, чтобы индикатор активности имел шанс начать анимацию до того, как вы будете заняты.
Правильный ответ определенно - переместить длительную операцию в фоновый поток и передать ее основному потоку, когда она будет завершена. Если вы не знаете, как это сделать, прочтите NSOperationQueue
и NSInvocationOperation
. Ваше приложение и ваши пользователи будут благодарить вас за минимальное время, необходимое для изучения.