Nano Hash - криптовалюты, майнинг, программирование

Плавная прокрутка UITableView

У меня проблема с плавной прокруткой UITableView. Может ли кто-нибудь помочь мне, где проблема? Код, который я написал, таков:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomTableCell";
    LabTestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if(cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil];

        cell = [nib objectAtIndex:0];

    }//cell.txtHeading.text=@"hello";

    cell.txtHeading.text=[[_ResponseDic valueForKey:@"title"]objectAtIndex:indexPath.row];

    cell.txtdescribtion.text=[[_ResponseDic valueForKey:@"description"]objectAtIndex:indexPath.row];

    cell.txtPrice.text=[[_ResponseDic valueForKey:@"purchase_price"]objectAtIndex:indexPath.row];

    cell.txtLabName.text=[[_ResponseDic valueForKey:@"brand"]objectAtIndex:indexPath.row];
    
    NSString *path=@"https://www.fingerfry.com/pharmgo/uploads/product_image/";
    NSString *url=[path stringByAppendingString:[[_ResponseDic valueForKey:@"main_image"]objectAtIndex:indexPath.row]];

    NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    UIImage* image = [[UIImage alloc] initWithData:imageData];
    
    cell.image.image=image;

    return cell;
}
01.06.2016

  • В чем проблема? 01.06.2016
  • Проблема заключается в загрузке и назначении изображения. Обе эти вещи происходят в основном потоке, и из-за этого вы сталкиваетесь с задержкой прокрутки. Используйте стороннюю библиотеку для загрузки и настройки изображений. 01.06.2016

Ответы:


1

Сначала установите модуль:

pod 'SDWebImage/WebP', '~>3.7' in pod file. 

Затем вам нужно импортировать:

#import <SDWebImage/UIImageView+WebCache.h>

Напишите ниже код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomTableCell";
    LabTestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil];

        cell = [nib objectAtIndex:0];

    }//cell.txtHeading.text=@"hello";

    cell.txtHeading.text=[[_ResponseDic valueForKey:@"title"]objectAtIndex:indexPath.row];

    cell.txtdescribtion.text=[[_ResponseDic valueForKey:@"description"]objectAtIndex:indexPath.row];

    cell.txtPrice.text=[[_ResponseDic valueForKey:@"purchase_price"]objectAtIndex:indexPath.row];

    cell.txtLabName.text=[[_ResponseDic valueForKey:@"brand"]objectAtIndex:indexPath.row];

    [cell.image sd_setImageWithURL:[NSURL URLWithString:[obj valueForKey:IMAGE_KEY]] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

        }];

    return cell;
} 

Ссылка: https://github.com/rs/SDWebImage

01.06.2016
  • Проблема в том, что вы загружаете изображение в методе - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath синхронно. Используйте SDWebImage/WebP для асинхронной загрузки изображения. Теперь вы не столкнетесь с проблемой прокрутки. 01.06.2016

  • 2

    Если вы загружаете изображение в cellForRowAtIndexPath, используйте асинхронный метод фоновой загрузки изображений, используйте этот код ниже,

    dispatch_queue_t image_queue = dispatch_queue_create("com.company.app.imageQueue", NULL);
    dispatch_queue_t main_queue = dispatch_get_main_queue();
    
    NSString *path=@"https://www.fingerfry.com/pharmgo/uploads/product_image/";
    NSString *url=[path stringByAppendingString:[[_ResponseDic valueForKey:@"main_image"]objectAtIndex:indexPath.row]];
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [paths  objectAtIndex:0];
    NSString  *dataPath = [cachePath stringByAppendingPathComponent:url];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ( [fileManager fileExistsAtPath:dataPath] )
    {
        UIImage *image = [UIImage imageWithContentsOfFile:dataPath];
       
        [cell.imgView setImage:image];
    }
    else
    {
        [cell.imgView setImage:[UIImage imageNamed:@"images.png"]];
        dispatch_async(image_queue, ^{
            NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
            UIImage *image = [UIImage imageWithData:imageData];
            [UIImagePNGRepresentation(image) writeToFile:dataPath atomically:YES];
            dispatch_async(main_queue, ^{
                
                [cell.imgView setImage:image];
                
            });
        });
        
    }
    

    У меня та же проблема, я поместил приведенный выше код в cellForRowAtIndexPath, он работает с нормальной прокруткой, надеюсь, это полезно

    01.06.2016
  • @priyasharma этот ответ правильный и отлично работает для вас, отметьте ответ 04.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..