Как реализовать загрузочную анимацию при навигации в приложении для iPhone? - PullRequest
6 голосов
/ 16 июля 2009

Кажется, это довольно простая проблема, но я не смог найти хороших ответов.

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

Это не должно быть чем-то необычным. Мне нравится, как это решается в приложении Facebook, например, с печально известным «прялкой».

Заранее спасибо!

Ответы [ 7 ]

26 голосов
/ 16 июля 2009

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

UIActivityIndicatorView  *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
av.frame=CGRectMake(145, 160, 25, 25);
av.tag  = 1;
[yourView addSubview:av];
[av startAnimating];

удаляя его

UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[yourView viewWithTag:1];
[tmpimg removeFromSuperview];

надеюсь, это поможет ...

4 голосов
/ 26 марта 2010

Ваша проблема заключается в том, что индикатор активности не будет отображаться, потому что он будет отображаться только при следующем проходе цикла выполнения - к тому времени вы сделаете все, что вам нужно!

Очень и очень простой способ сделать это состоит в том, чтобы переместить ваш код для вызова следующего представления в свой собственный метод, затем (построив UIActivityIndicator, как и в других постах здесь) [self.myactivityindicator startAnimating]; [self performSelector:@selector(myCodeToCallTheView) withObject:nil afterDelay:0];

это дает достаточно шансов для рисования индикатора перед запуском вашего кода для рисования вида. Конечно, как только ваш новый вид появится, он перезапишет селектор.

3 голосов
/ 24 июля 2009

Ах-ха! Я только что наткнулся на самый удобный класс: MBProgressHUD . Попробуйте. Я верю, что он делает то, что вы ищете, а затем и некоторые.

Я также внес несколько модов в комментарии автора к блогу.

3 голосов
/ 16 июля 2009

Вы можете добавить UIActivityIndicatorView к любому представлению, которое «загружается»:

CGRect mainBounds = [[UIScreen mainScreen] bounds];
CGRect indicatorBounds = CGRectMake(mainBounds.size.width / 2 - 12,
    mainBounds.size.height / 2 - 12, 24, 24);
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
    initWithFrame:indicatorBounds]];
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
[indicator startAnimating];
[yourLoadingView addSubview:indicator];
1 голос
/ 03 декабря 2009

Вам необходимо реализовать новый поток для работы, которая должна быть сделана между началом и остановкой анимации. Смотрите следующее:
http://discussions.apple.com/thread.jspa?threadID=1531358&start=0&tstart=0

1 голос
/ 17 июля 2009

Обратите внимание, что UIActivityIndicatorView поставляется с несколькими встроенными стилями на выбор. В приведенных выше примерах кода используются параметры «Серый» и «Белый», но в документации Apple есть еще несколько. Вы можете установить стиль, используя:

-initWithActivityIndicatorStyle:(UIActivityIndicatorViewStyle)

или установив свойство activityViewIndicatorStyle объекта.

1 голос
/ 16 июля 2009

Я думаю, это зависит от того, что загружается? Вы ждете ответа от сервера? В этом случае я обычно ставлю вращающееся колесо (UIActivityIndicatorView) на мое представление, у которого установлен флажок скрывать, когда не анимация (также есть сообщение, чтобы установить это программно). Затем, когда данные получены с сервера, я просто вызываю stopAnimating в представлении UIActivityIndicator, и оно скрывается. Затем вы можете показать все, что вам нужно показать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...