繁体   English   中英

UITableView 的平滑滚动

[英]Smooth scrolling of 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;
}

如果您在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 ,它可以正常滚动,希望它有帮助

首先安装pod:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM