Запустите UIActivityIndicatorView, когда основной поток занят - PullRequest
5 голосов
/ 06 марта 2010

есть ли способ отобразить анимированное вращающееся колесо, пока основной поток выполняет длительную операцию? Анимация обрабатывается тем же потоком, который создал UIActivityIndicatorView, верно? Если да, могут ли представления, принадлежащие нескольким потокам, находиться в одной иерархии представлений?

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

РЕДАКТИРОВАТЬ: "longy" составляет около 2 секунд на устройстве 1-го поколения.

Ответы [ 2 ]

9 голосов
/ 06 марта 2010

Решение состоит в том, чтобы запустить анимацию хотя бы за одну итерацию в цикле выполнения, прежде чем запускать длительную операцию. Например:

[activity startAnimating];
[self performSelector:@selector(lengthyOperation) withObject:nil afterDelay:0];

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

6 голосов
/ 06 марта 2010

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

...