UIActivityIndicatorView, отображение во время загрузки изображения в текущем представлении - PullRequest
1 голос
/ 11 мая 2011

У меня есть кнопка, и при нажатии она загружает несколько изображений из Интернета, чтобы отобразить их в другом виде. Однако в тот момент, когда я нажимаю кнопку, кнопка переходит в подсвеченное состояние и, кажется, застревает там во время загрузки изображений (и, по сути, готовится следующий вид). Меня не смущает застревание кнопки в подсвеченном режиме (на самом деле я предпочитаю так).

Однако мне бы хотелось, чтобы UIActivityView отображался в представлении, в котором отображается кнопка, в то время как загружается следующее представление (и изображения загружаются из Интернета, поскольку это занимает некоторое время) ... Как бы Я иду о реализации этого логически?

Спасибо

Jack

Ответы [ 4 ]

0 голосов
/ 11 мая 2011

Вы бы установили рамку ваших индикаторов там, где вам это нужно;центр UIButton.

Вы не указали, как вы загружаете свои изображения, но когда вы начинаете загрузку, используйте [indicator startActivity];, а когда загрузка завершится, используйте [indicator stopActivity];

Вы также можете добавить setHidden:YES / setHidden:NO, где вы добавите старт / стоп вызовы.

0 голосов
/ 11 мая 2011

Я полагаю, вы используете NSURLConnection для подключения и загрузки изображений?Если дело обстоит именно так, вы бы хотели использовать такой подход:

В IB поместите UIActivityIndicatorView на ваше представление там, где вам это нужно, и определите его стиль на панели «Атрибуты».Скажите это, чтобы скрыть при остановке.И обязательно свяжите его с вашим кодом в заголовочном файле владельца.

UIActivityIndicatorView *indicator;

и

@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *indicator;

Когда вы создадите NSURLConnection и начнете запрос, скажите индикатору, чтобы он начал анимациюс [indicator startAnimation];.Если вы не хотите, чтобы ваша кнопка отображалась на экране, вы можете удалить ее из суперпредставления, если хотите.

Как только вы закончите загрузку, вы можете указать индикатор [indicator stopAnimation] (и добавить свою кнопку обратно, есливы удалили его ранее) в своем методе - (void)connectionDidFinishLoading:(NSURLConnection *)connection.

Если вы загружаете изображения без использования NSURLConnection, это, конечно, будет другим, но логически это должен быть тот же подход.Хотя я согласен с Дэвидом, что это должно быть сделано в фоновом потоке

0 голосов
/ 11 мая 2011

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

UIImage *newImage12 = [UIImage imageNamed:@"yourimagename"];
[deleteButton setBackgroundImage:newImage12 forState:UIControlStateNormal];
[deleteButton setBackgroundImage:newImage12 forState:UIControlStateHighlighted];

Для добавления индикатора активности

в .h файле

IBOutlet UIActivityIndicatorView *indicator;

сделать собственность

добавить индикатор в xib и выполнить подключение.

синтезирует и выпускает файл ..m

при нажатии на кнопку, где вы хотите показать свой индикатор: -

[indicator startAnimating];

где вы хотите остановить свой индикатор, пишите

[indicator stopAnimating];
0 голосов
/ 11 мая 2011

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

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

...