Как добавить индикатор активности на изображение в UITableView?

Я создал пользовательский tableView и использовал пользовательский класс tableView в классе Other, чтобы показать tableView..

Я загружаю изображение с сервера и отображаю его в tableViewRow.. каждый image в нем отличается..

На экране появятся только 7 из 10 изображений, и когда я прокручиваю вниз, первые 3 изображения повторяются в течение некоторого времени, и когда эти изображения загружаются, отображаются правильные изображения ... но сначала, пока не появятся новые изображения, отображаются старые изображения, я хочу поставить индикатор активности, чтобы показать, что изображения загружаются вместо старых изображений.

Я хочу добавить activity Indicator вместо image, пока image не загрузится..

Мой код...

self.tableViewX = tableView;
static NSString *simpleTableIdentifier = @"SimpleTableCell";
SimpleTableCell *cell = (SimpleTableCell *)[tableView1 dequeueReusableCellWithIdentifier:simpleTableIdentifier];
 if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
    {
NSString *imageURL = [NSString stringWithFormat: @"www.xyz.image.png"];
cell.thumbnailImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]];
 });

Пожалуйста, помогите мне с примером кода..


person Raju    schedule 11.03.2013    source источник
comment
Для этого вы можете использовать асинхронное представление изображения. Поскольку изображение отображается так, как вы используете dequeueReusableCellWithIdentifier, поэтому сделайте другой идентификатор или сделайте ячейку нулевой.. тогда вы можете достичь этого   -  person 08442    schedule 11.03.2013
comment
raywenderlich.com/4295/   -  person βhargavḯ    schedule 11.03.2013
comment
@08442 : Как использовать асинхронный просмотр изображения? у вас есть пример кода, из которого я могу это понять..   -  person Raju    schedule 11.03.2013
comment
@bhargavi: нам нужен класс ASIHTTPRequest для этого?   -  person Raju    schedule 11.03.2013
comment
Не могу ли я создать подвид изображения, чтобы индикатор активности работал до загрузки изображения?   -  person Raju    schedule 11.03.2013
comment
@Raju да, вам нужен ASIHTTPRequest для асинхронного просмотра изображений   -  person βhargavḯ    schedule 11.03.2013


Ответы (1)


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

Вы можете загрузить файлы класса «AsyncImageView» по следующей ссылке: - https://www.dropbox.com/s/peazwjvky9fsjd7/Archive.zip

в файле .m импорт класса AsyncImageView

 #import "AsyncImageView.h" 

в вашей ячейке таблицы в методе indexpath

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *simpleTableIdentifier = @"SimpleTableCell";
     SimpleTableCell *cell = (SimpleTableCell *)[tableView1 dequeueReusableCellWithIdentifier:simpleTableIdentifier];
     if (cell == nil)
     {
           NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
      cell = [nib objectAtIndex:0];
     }
     NSString *imageURL = [NSString stringWithFormat: @"www.xyz.image.png"];
     AsyncImageView *async = [[AsyncImageView alloc]initWithFrame:CGRectMake(0, 0, width, height)];
     [async loadImageFromURL:[NSURL URLWithString:imageURL]];
     [cell.thumbnailImageView addSubview:async];
}

попробуйте это, ваша проблема будет решена.

person Pratik    schedule 11.03.2013
comment
что это будет [асинхронная загрузкаImageFromURL: [URL NSURLWithString: strThumbImageUrl] imageName: @]; заявление подойдет? и что такое strThumbImageUrl? это то же самое, что и imageURL? - person Raju; 11.03.2013
comment
это URL вашего изображения, пожалуйста, проверьте ответ, теперь я отредактировал ответ - person Pratik; 11.03.2013
comment
показывает ошибку. Нет видимого @interface для «AsyncImageView» объявляет селектор «loadImageFromURL: imageName:» - person Raju; 11.03.2013
comment
это метод файлов класса asyncImageView, удалите имя изображения: @ и попробуйте посмотреть, я отредактировал код - person Pratik; 11.03.2013
comment
Я также пробовал [async loadImageWithURL: [NSURL URLWithString: imageURL]], но он по-прежнему показывает, что нет видимого @interface для «AsyncImageView», объявляет ошибку селектора «loadImageWithURL:». - person Raju; 11.03.2013
comment
пожалуйста, используйте ниже файлы другого класса, загрузите его по ссылке ниже dropbox.com/s/peazwjvky9fsjd7/Archive .zip - person Pratik; 11.03.2013
comment
@Raju Попробуйте изменить loadImageFromURL на loadImageWithURL:(NSURL*)url, так как в интерфейсе есть этот метод: - - (void)loadImageWithURL:(NSURL *)URL;. - person Zen; 11.03.2013
comment
@Pratik Отредактируйте свой ответ, чтобы он соответствовал названию метода. Сделайте это loadImageWithURL:(NSURL*). - person Zen; 11.03.2013
comment
как я могу добавить изображение из системы в этот асинхронный класс? у меня есть одно изображение в поддерживаемых файлах.. как я могу загрузить это изображение в асинхронный класс? - person Raju; 11.03.2013
comment
@zen: я тоже пробовал это. но это показывало какую-то ошибку.. - person Raju; 11.03.2013
comment
@Raju Что это за ошибка. А для загрузки локальных изображений посмотрите демоверсию. Он загружает изображения как с локальных, так и с интернет-ресурсов. Пройдите через это. - person Zen; 11.03.2013
comment
@zen: ошибка: «AsyncImageView» объявляет селектор «loadImageWithURL:» - person Raju; 11.03.2013
comment
на самом деле я получил решение ... но когда я не понимаю, как загрузить локальное изображение в тот же асинхронный класс ... и когда я пытаюсь cell.thumbnailImageView.image = [UIImage imageNamed: @imageLock.png]; его бьют несколько раз.. - person Raju; 11.03.2013
comment
github.com/nicklockwood/AsyncImageView Вы загрузили это отсюда. В нем вы можете увидеть демо-код. - person Zen; 11.03.2013
comment
Я делаю это так, и в некоторых местах его поражают. (0, 0, 50, 50)]; NSString *lockImage = [[NSBundle mainBundle] pathForResource:@imageLock ofType:@png]; [асинхронная загрузкаImageFromURL:[[NSURL alloc] initFileURLWithPath:lockImage]]; [cell.thumbnailImageView addSubview: асинхронно]; } еще { изображение с сервера } - person Raju; 11.03.2013