在UITableViewCell中调整UIImageView的大小

时间:2010-11-08 10:19:44

标签: objective-c cocoa-touch uikit

我想要在UIImageView中显示一个16x16像素的图像。到目前为止,没问题,但是16x16有点小,所以我想将图像视图调整为32x32,从而也可以将图像缩放。 但我不能让它工作,无论我尝试什么,它总是以16x16显示图像。我搜索了很多,并在Stack Overflow上发现了很多片段,但它仍然不起作用。 到目前为止,这是我的代码:

[[cell.imageView layer] setMagnificationFilter:kCAFilterNearest];
[cell.imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[cell.imageView setClipsToBounds:NO];
[cell.imageView setFrame:CGRectMake(0, 0, 32, 32)];
[cell.imageView setBounds:CGRectMake(0, 0, 32, 32)];
[cell.imageView setImage:image];

我不想创建一个新的32x32像素图像,因为我已经在旧设备上存在一些内存问题并且创建了两个图像而不是只有一个看起来像是一个非常糟糕的方法(图像可以完美缩放和如果他们失去了质量并不重要。)

4 个答案:

答案 0 :(得分:30)

我已成功使用CGAffineTransformMakeScale!

cell.imageView.image = cellImage;
//self.rowWidth is the desired Width
//self.rowHeight is the desired height
CGFloat widthScale = self.rowWidth / cellImage.size.width;
CGFloat heightScale = self.rowHeight / cellImage.size.height;
//this line will do it!
cell.imageView.transform = CGAffineTransformMakeScale(widthScale, heightScale);

答案 1 :(得分:4)

我认为您需要设置contentMode:

cell.imageView.contentMode = UIViewContentModeScaleAspectFit;

在上下文中:

UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"slashdot" ofType:@"png"]];
imageView = [[UIImageView alloc] initWithImage:image];
[imageView setBackgroundColor:[UIColor greenColor]];
[imageView setFrame:CGRectMake(x,y,32,32)];
imageView.contentMode = UIViewContentModeScaleAspectFit;    
[self.view addSubview:imageView];

注意:我设置了背景颜色,因此您可以调试UIImageView的屏幕边界。 xy也是任意整数坐标。

答案 2 :(得分:1)

使用CGAffineTransformMakeScele作为@ahmed说是有效的,似乎不是鸭子类型的解决方案!例如,如果您有一个大图像并将其放入UITableViewCell(假设图像比适合表格单元格的图像大2倍。如果您按比例缩放0.9,则不会看到任何结果。仅当您按比例缩放时小于0.5(因为0.5 * 2.0 = 1.0就是单元格的大小)。所以看起来在api里面,苹果正是这样做的。

答案 3 :(得分:1)

您需要覆盖layoutSubviews方法。默认情况下,它会根据单元格高度大小调整imageview的大小。

-(void)layoutSubviews
{
    [super layoutSubviews];

    self.imageView.frame = CGRectMake(self.imageView.frame.origin.x,
                                      self.imageView.frame.origin.y,
                                      MY_ICON_SIZE,
                                      MY_ICON_SIZE);
}

您可能也想重新计算原点,因此它会垂直居中。