我正在我的iPhone应用程序中从web加载图像。我正在使用此图像作为表格单元格的图像视图。应用程序启动后几秒钟,所有图像都被完全加载。但是滚动表格不平滑。有延迟。滚动在手势后几秒钟发生。还有抽搐。我正在使用这段代码
UIImage *imagefromWeb = [UIImage imageWithData:[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]]];
CGSize newSize= CGSizeMake(45.0,45.0);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[imagefromWeb drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cell.imageView.image=newImage;
答案 0 :(得分:2)
您正在同步加载图像,这就是问题尝试使用以下代码进行异步下载图像的原因:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSURL *imageURL=[NSURL URLWithString:urlString];
NSData *imageData=[NSData dataWithContentsOfURL:imageURL];
dispatch_sync(dispatch_get_main_queue(), ^{
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
cell.imageView.image=[UIImage imageWithData:imageData];
[cell setNeedsLayout];
});
});
答案 1 :(得分:2)
您可以使用“sdwebimage”的uiimageview类别,希望它能解决您的问题。
答案 2 :(得分:1)
您可以使用延迟加载从URL加载图片,请参阅以下示例链接
http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html
希望它能帮到你......
答案 3 :(得分:1)
此代码:[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]
使应用程序挂起。因为dataWithContentsOfURL
方法是同步调用。你永远不会在主线程上调用这样的同步调用,它会使你的UI无响应。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *imagefromWeb = [UIImage imageWithData:[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]]];
CGSize newSize= CGSizeMake(45.0,45.0);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[imagefromWeb drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image=newImage;
});
});
有很多开源库用于将图像加载到tableView并缓存它们,请检查: