我有一个表视图,我想用图像和文本做经典列表。
这是我的cellForRowAtIndexPath。一切都工作正常,没有图像细化,但这对于呈现视图控制器非常缓慢,并且滚动不流畅。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
NSDictionary* element = [dataSource objectAtIndex:indexPath.row];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
NSString* imageUri = [element valueForKey:@"uri"];
UIImage* image = [UIImage imageWithContentsOfFile:imageUri];
CGFloat wImg = image.size.width * cell.frame.size.height / image.size.height;
CGSize newSize = CGSizeMake(wImg, cell.frame.size.height);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
cell.textLabel.text = [ element valueForKey:@"text"];
cell.imageView.image = newImage;
return cell;
}
我有大图片(iphone照片),有什么更好的方法呢?
答案 0 :(得分:2)
不是每次加载单元格时调整大小,如果缓存已调整大小的图像并使用它们,您将获得更好的性能。
答案 1 :(得分:-1)
使用核心图形调整图像大小是非常昂贵的操作,并且正在影响用户体验,导致滚动不流畅。
只需使用图片并设置contentMode
cell.imageView
属性即可
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *simpleTableIdentifier = @"SimpleTableItem";<br/>
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
NSDictionary* element = [dataSource objectAtIndex:indexPath.row];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
NSString* imageUri = [element valueForKey:@"uri"];
UIImage* image = [UIImage imageWithContentsOfFile:imageUri];
cell.textLabel.text = [ element valueForKey:@"text"];
cell.imageView.image = newImage;
cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
return cell;
}