2012-03-08 3 views
0

У меня есть функция onClickButton, где я делать (псевдокод):Моя активность Индикатор шоу после моего алгоритма

show activityIndicatorView (or ProgressBar or change label text no matter) 
execute my algorithm 
hide activityIndicatorView 

actvitiyIndicatorView никогда не покажет. Если я удалю скрытие в конце функции, то оно появится после алгоритма. Несмотря на то, что я показываю его перед выполнением алгоритма.

Почему и как я могу это исправить?

ответ

2

Скорее всего, ваш выполнить мой алгоритм долгое процессорное время процесса, который называется в главном потоке ...

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

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

Альтернативный способ выполнить длинную задачу после того, как некоторые delay..so этого обновления пользовательского интерфейса самого

+0

Спасибо за помощь. Можете ли вы привести какой-нибудь пример, как это реализовать? – user968991

+1

Предположим, что ваша функция алгоритма - это abc .. так и сделайте это. Show activity; '[self performselector: @selector (abc) withObject: nil afterDelay: 2]' и переместить операцию hide в конец функции abc .. использовать autocomplete..my код будет иметь много ошибок из-за написания. – Shubhank

Смежные вопросы