我有一个慢慢滚动的表格视图。有谁知道为什么会这样?
每行都有一个图像,但即使在加载图像后,它仍然会慢慢地卡住和滚动。
感谢您的帮助
这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SimpleTableCell";
SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
// Get item from tableData
NSDictionary *item = (NSDictionary *)[displayItems objectAtIndex:indexPath.row];
// display the youdeal deal image
photoString = [item objectForKey:@"image"];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:photoString]]];
cell.titleLabel.text = [item objectForKey:@"supercat"];
cell.descriptionLabel.text = [item objectForKey:@"title"];
NSString *convertedLeftCount = [NSString stringWithFormat:@"%@",[item objectForKey:@"left_count"]];
cell.amountLabel.text = convertedLeftCount;
cell.thumbnailImageView.image = image;
cell.priceLabel.text = [item objectForKey:@"cat"];
return cell;
}
答案 0 :(得分:3)
这是由于您使用的图像加载机制。
您正在主线程中从url加载图像。这就是为什么UI被阻塞一段时间dataWithContentsOfURL:
同步调用。因此,UI将在获取图像数据后作出响应。
<强>解决方案:强>
源代码和第三方库
以下是一些链接,可帮助您了解使用异步方法借出图像的基本思路
答案 1 :(得分:2)
每次加载单元格时都会加载图像,因为imageWithData:不使用任何缓存。
编辑:我看到一条评论建议异步加载图片。您已经拥有每个单元格的自定义类,因此应该很容易实现。如果这是一个答案我会投票
答案 2 :(得分:0)
我想你是想说这个。
NSURL* url = [NSURL URLWithString:@"http://www.YourImageUrl.com"];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse * response,
NSData * data,
NSError * error) {
if (!error){
UIImage* image = [[UIImage alloc] initWithData:data];
// Now workout with the image
}
}];
这将进行异步调用,并在加载tableview后加载图像,即当图像加载完成时图像将显示但是当需要加载表视图时将加载表。