Неправильная прокрутка Когда я использовал SDWebImage

У меня очень серьезная проблема с прокруткой таблицы.

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

Может ли кто-нибудь сообщить мне причину этого. Почему прокрутка таблицы не является плавной, как ожидалось.

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

Код :

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

           NSString *CellIdentifier = @"Cell";
        customCellForExhibitor *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil)
        {
            NSArray *xibPath = [[NSBundle mainBundle]loadNibNamed:@"customCellForExhibitor" owner:self options:nil];
            for (id fileObject in xibPath)
            {
                cell = (customCellForExhibitor*)fileObject;
            }
        }

        objDataModel = [parserDataContentArray objectAtIndex:indexPath.section];

        cell.exhibitorNameLabel.text = [objDataModel exhibitorNameObjectClass];
        cell.exhibitorText.text = [objDataModel exhibitorOfferObjectClass];
        cell.exhibitorSponsorType.text = [objDataModel exhibitorSponsorTypeObjectClass];

        [cell.exhibitorSponsorType setTextAlignment:NSTextAlignmentRight];



//        #pragma mark GCD;
//    
//        NSString *ImageURL = [[parserDataContentArray objectAtIndex:indexPath.section] exhibitorImageObjectClass];
////        NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:ImageURL]];
////        cell.exhibitorImage.image = [UIImage imageWithData:imageData];
//
//        dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//        //this will start the image loading in bg
//        dispatch_async(concurrentQueue, ^{
//        NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:ImageURL]];
//        
//        //this will set the image when loading is finished
//        dispatch_async(dispatch_get_main_queue(), ^{
//            
//            cell.exhibitorImage.image = [UIImage imageWithData:imageData];
//            [cell setNeedsDisplay];
//
//                                                    });
//                                        });

     NSString *ImageURL = [[parserDataContentArray objectAtIndex:indexPath.section] exhibitorImageObjectClass];
     [cell.exhibitorImage setImageWithURL:[NSURL URLWithString:ImageURL]
                      placeholderImage:[UIImage imageNamed:@"placeholder.png"]];



        if ([cell.exhibitorSponsorType.text isEqualToString:@"Gold"]) {
            cell.exhibitorSponsorType.textColor = [UIColor colorWithRed:255/255.0 green:215/255.0 blue:0 alpha:1];

        }

        else if ([cell.exhibitorSponsorType.text isEqualToString:@"Silver"]){
            cell.exhibitorSponsorType.textColor = [UIColor colorWithRed:192/255.0 green:192/255.0 blue:192/255.0 alpha:1];
        }
        else cell.exhibitorSponsorType.textColor = [UIColor colorWithRed:229/255.0 green:228/255.0 blue:226/255.0 alpha:1];

        return cell;



}

Спасибо. С наилучшими пожеланиями.


person Community    schedule 07.08.2013    source источник
comment
Пожалуйста, отредактируйте код, где вы загружаете и устанавливаете эти изображения в своем табличном представлении.   -  person Lucas Eduardo    schedule 07.08.2013
comment
@LucasEduardo: Эй, пожалуйста, проверьте отредактированный вопрос. Не пропустите часть комментариев, где я использовал GCD.   -  person    schedule 07.08.2013
comment
@LucasEduardo: Нужно ли мне использовать какие-либо делегаты таблицы или какие-либо делегаты SDWebImage???   -  person    schedule 07.08.2013
comment
Нет, этого должно было хватить. На каком устройстве вы пытаетесь запустить этот код? Даже с SDWebImages это тяжелая обработка, для всех изображений есть новый поток, работающий в фоновом режиме, загружающий материал, обновляющий представления изображений и т. д.   -  person Lucas Eduardo    schedule 07.08.2013
comment
@LucasEduardo Я не уверен, но, вероятно, это iPhone 4s. Что мне делать. Не могли бы вы предложить мне что-нибудь, так как это важно для меня и должно быть сделано как можно скорее.   -  person    schedule 07.08.2013
comment
Извините, но я не могу вам помочь =/. Просто попробуйте удалить любую обработку из cellForRowAtIndexPath, если это возможно. Может быть, у кого-то будет лучшее решение. Проголосовал за вопрос, чтобы помочь, удачи с вашим приложением   -  person Lucas Eduardo    schedule 07.08.2013
comment
@LucasEduardo: Спасибо. Не могли бы вы сообщить мне, можем ли мы кэшировать текстовые данные так же, как мы это делали для изображения?   -  person    schedule 07.08.2013


Ответы (1)


Вместо этого используйте файл отложенной загрузки, вот ссылка, которую вы можете найти здесь вместе с демонстрацией того, как это реализовано.

https://stackoverflow.com/a/18032907/1305001

[cell addSubview:[self addViewWithURL:ImageURL NFrame:CGRectMake(0, 0, 50, 50)]];

добавьте этот метод ниже cellForRow

-(UIView*)addViewWithURL:(NSString*)urlStr NFrame:(CGRect)rect
{
    LazyLoad *lazyLoading;

    lazyLoading = [[LazyLoad alloc] init];
    [lazyLoading setBackgroundColor:[UIColor grayColor]];
    [lazyLoading setFrame:rect];

    [lazyLoading loadImageFromURL:[NSURL URLWithString:urlStr]];
    return lazyLoading;
}

Установите заполнитель в методе инициализации файла LazyLoad.m как

-(id)init{
    if (self==[super init]) {
        [self setImage:[UIImage imageNamed:@"placeholder.png"]];
    }
    return self;
}

И измените superClass файла LazyLoad.h на UIImageView из UIView как

@interface LazyLoad : UIImageView
person Warewolf    schedule 08.08.2013