(iphone) показать пользовательский индикатор активности?

Я сделал собственный индикатор активности (на самом деле просто imageView)

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

Странно то, что индикатор не появляется, пока не начнется анимация нажатия (влево-вправо).

Это потому, что система берет на себя долгую работу, а отрисовка пользовательского интерфейса для индикатора активности задерживается?

Я что-то здесь делаю не так?

Спасибо

  • Редактировать

Похоже, я могу "нажать" в фоновом режиме .. Я пробую сейчас ​​IPhone SDK - утечка памяти с помощью performSelectorInBackground


person eugene    schedule 17.03.2011    source источник


Ответы (2)


Ваша работа синхронная или асинхронная?

Если это первый случай, то это может быть проблемой.

Проверьте все методы, например:

[ self performSelector:<#(SEL)aSelector#> ];

Вы можете нить это, чтобы избежать [потенциальной] проблемы.

Удачи.

person Vinzius    schedule 17.03.2011

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

Таким образом, вам нужно реорганизовать свое приложение, выделение и нажатие viewController должно произойти в мгновение ока, потому что вы не можете сделать это в фоновом режиме.

Но вы можете выполнять обработку (я думаю, загружая данные) в фоновом режиме.

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

person Matthias Bauch    schedule 17.03.2011
comment
@fluchtpunkt, спасибо, на самом деле, alloc / push выполняется быстро, просто кажется, что когда viewController нажимается, загрузкаView для viewController происходит медленно. Облегчает ли это решение моей проблемы? - person eugene; 17.03.2011
comment
конечно, все, что происходит в методах, связанных с push, тоже должно происходить быстро. Такие методы, как viewWillAppear, viewDidLoad, loadView, viewDidAppear и так далее. performSelectorInBackground:withObject: отодвинет вашу длительную задачу на задний план, но, к сожалению, есть огромная очередь вещей, которые вам нужно изменить для поддержки фонового режима. Например. вы не можете обновить пользовательский интерфейс из фона. - person Matthias Bauch; 17.03.2011
comment
@fluchtpunkt странно, я тоже так подумал, что вы не можете обновить пользовательский интерфейс из фона, но кажется, что это работает ..? Работает .. но я запуталась .. - person eugene; 17.03.2011
comment
@fluchtpunkt на самом деле viewWill * / viewDid происходит до того, как iphone отобразит представление на экране. Вот почему это работает? - person eugene; 17.03.2011
comment
Честно говоря, я понятия не имею, что (я думаю, это в основном зависит от того, что) или почему это работает. Я просто знаю по своему опыту, что обновление UITableView или UIWebview из фона приводит к чему угодно (обновление никогда не происходит), может быть позже (обновление происходит через 5 секунд) или к сбою. --- Я просто прочитал документ еще раз, и он говорит, что (иногда) нормально создавать представления из фонового потока. Так что, я думаю, все, что было до addSubview:, можно было делать в фоновом режиме. Но я никогда этого не пробовал и, вероятно, никогда не буду. - person Matthias Bauch; 17.03.2011
comment
@fluchtpunkt хорошо, ну, я тестировал более 10 раз, ни разу не разбился .. Я обновлю здесь, если он наконец выйдет из строя .. скрестите пальцы :( - person eugene; 17.03.2011