为什么我们应该避免在绘制单元格时从服务器加载图像?
在我的应用程序中,我从服务器获取包含图像URL的数据。现在,我绘制单元格并使用这些图像URL从服务器获取图像并绘制它。现在,有时即使图像实际存在于该URL,图像也不会显示,因为我可以通过浏览器看到它。
是否存在可能导致此问题的细胞绘图限制?当我从服务器获取数据时,我应该获取图像。
在实际绘制图像之前是否进行了单元格渲染。
答案 0 :(得分:1)
NSString *imgUrl = [ImageURLArray objectAtIndex:indexPath.row];
if(imgUrl != nil)
{
NSString * ImagePath;
NetworkManager *manager = [[NetworkManager alloc] init];
ImagePath = [manager GetFile:imgUrl];
[manager release];
manager = nil;
if(ImagePath != nil)
{
UIImage *newImage = [UIImage imageWithData:[NSData dataWithContentsOfFile:ImagePath]];
UIGraphicsBeginImageContext(CGSizeMake(50, 50));
// now redraw our image in a smaller rectangle.
[newImage drawInRect:CGRectMake(25, 10, 30, 30)];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cell.imageView.image = newImage;
}
}
return cell;
}
希望这能解决您的问题
答案 1 :(得分:0)
可能发生的是你有一个主线程,它是UI显示线程。通过从该线程从URL获取图像,您基本上阻止了该单元(即滚动)。也可能是图像处于下载过程中的情况,在这种情况下,在下载之前您将看不到它。
通常UITableView
在显示准备好之前不会显示单元格,通过在主线程中进行图像下载会损害您的性能。你应该做的是启动一个后台线程,从网址和网址下载图像。然后在下载准备就绪时更新图像内容的单元格。
最好的方法是拥有一个初始占位符,如默认图像或微调器,在主图像下载完成后会被替换。
别担心,你不需要实现这一切。没有必要重新发明轮子。这是一个很棒的库,我用它来做同样的事情 - UIImageView + WebCache
答案 2 :(得分:0)
显然,图像下载需要更多时间。您应该使用占位符图像,直到下载完成。您无法阻止用户滚动。
答案 3 :(得分:0)
从服务器获取数据时获取图像并将信息传递给视图。
喜欢
ImageView *imageView = [[ImageView alloc] initWithNibName:@"ImageView" bundle:[NSBundle mainBundle]];
imageView.prod=self.prod;
imageView.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:imageView animated:YES];
[imageView release];
imageView=nil;
希望这能解决您的问题